超文本預處理器——PHP(基礎)

PHP,百度百科解釋爲一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。

在學習之前瞭解一下PHP及其功能:
1、在服務器端運行,WEB網站的大部分數據都是存儲在服務器端的,PHP就是用來處理這些存儲在服務器端的數據的。
2、可以在多個平臺運行,比如Linus、Windows、Unix…
3、它是一種腳本語言,通過編寫腳本來指揮服務器工作。
4、不支持IE9版本以下的瀏覽器。

基本PHP語法

按照慣例,先打出一個Hello,World!

<?php
echo 'Hello,World!';
?>

運行結果爲:

這裏寫圖片描述

可以看出PHP代碼是寫在<?php 此處是php代碼?>標籤之間的。
echo是PHP中的輸出語句,可以把字符串輸出(字符串用引號括起來)。

單行註釋(//或#);多行註釋(/**/)

在 PHP 中,所有用戶定義的函數、類和關鍵詞(例如 if、else、echo 等等)都對大小寫不敏感。但是所有變量都對大小寫敏感。

PHP變量

PHP變量規則

  • 變量以 $ 符號開頭,其後是變量的名稱
  • 變量名稱必須以字母或下劃線開頭
  • 變量名稱不能以數字開頭
  • 變量名稱只能包含字母數字字符和下劃線(A-z、0-9 以及 _)
  • 變量名稱對大小寫敏感($y$Y 是兩個不同的變量)

PHP沒有創建變量的命令,變量會在首次爲其賦值時被創建;在創建PHP變量時不必聲明其數據類型,PHP會根據它的值自動把變量轉換爲正確的數據類型;

PHP變量作用域
在PHP中,可以在腳本的任何位置對變量進行聲明,變量的作用域指的是變量能夠被訪問的那部分腳本。PHP有三種不同的作用域:

  • local(局部)
  • global(全局)
  • static(靜態)

Local和Global作用域
函數之外聲明的變量擁有 Global 作用域,只能在函數以外進行訪問。
函數內部聲明的變量擁有 LOCAL 作用域,只能在函數內部進行訪問。
註釋:可以在不同的函數中創建名稱相同的局部變量,因爲局部變量只能被在其中創建它的函數識別。

PHP global關鍵詞
global關鍵詞用於訪問函數內的全局變量。

<?php
$x=5;
$y=10;

function myTest() {
  global $x,$y;
  $y=$x+$y;
}

myTest();
echo $y; // 輸出 15
?>

運行結果爲15,正確!

PHP static 關鍵詞

通常,當函數完成/執行後,會刪除所有變量。不過,有時我需要不刪除某個局部變量。實現這一點需要更進一步的工作。要完成這一點,請在您首次聲明變量時使用 static 關鍵詞:

<?php

function myTest() {
  static $x=0;
  echo $x;
  $x++;
}

myTest();
myTest();
myTest();

?>

運行結果:
這裏寫圖片描述

PHP 數據類型

PHP字符串:
字符串是字符序列,比如 “Hello world!”。字符串可以是引號內的任何文本。您可以使用單引號或雙引號。

PHP 整型:
- 整數必須有至少一個數字(0-9)
- 整數不能有小數點
- 整數正負均可
- 可以用三種格式規定整數:十進制、十六進制(前綴是 0x)或八進制(前綴是 0)

PHP NULL值
特殊的 NULL 值表示變量無值。NULL 是數據類型 NULL 唯一可能的值。
NULL 值標示變量是否爲空。也用於區分空字符串與空值數據庫。

PHP 浮點數、數組、對象(略)

PHP 常量

常量是單個值的標識符(名稱)。在腳本中無法改變該值。有效的常量名以字符或下劃線開頭(常量名稱前面沒有 $ 符號)。
註釋:與變量不同,常量貫穿整個腳本是自動全局的。

如需設置常量,請使用 define() 函數 - 它使用三個參數:
1. 首個參數定義常量的名稱
2. 第二個參數定義常量的值
3. 可選的第三個參數規定常量名是否對大小寫敏感。默認是 false。

PHP 運算符

PHP 字符串運算符
. (串接) $txt1 = "Hello" $txt2 = $txt1 . " world!" 結果爲$txt2=”Hello World”
.=(串接賦值) $txt1 = "Hello" $txt1 .= " world!" 結果爲 $txt1 = “Hello world!”


PHP數組

首先數組分爲一維數組和多維數組,而多維數組中只有二維和三維數組是經常用到的(因爲當維數超過三維便難以理解),二位數組是數組的數組(三維數組是數組的數組的數組)。

一維數組的定義:arr=array(); arr = array(array(…);array(…);array(…););

索引數組

索引數組賦值有三種方式:

1array[0]='蘋果'2$arr=array('0'=>'蘋果');
3$arr=array('蘋果');

索引數組的訪問:$srr = $arr['0'];(因爲輸出的是索引數組所以$arr[0]也可以將第一個數據取出來,但是如果輸出關聯數組,若不給建加引號就無法輸出,所以爲了不必要的麻煩,給所有的鍵值加引號);

foreach循環

foreach循環只適用於數組,並用於遍歷數組中的每個鍵/值對。
每進行一次循環迭代,當前數組元素的值就會被賦值給 $value 變量,並且數組指針會逐一地移動,直到到達最後一個數組元素。

下面的例子演示的循環將輸出給定數組($colors)的值:

<?php 
$colors = array("red","green","blue","yellow"); 

foreach ($colors as $value) {
  echo "$value <br>";
}
?>

注:$colors爲數組,可用count()函數獲得數組的長度。
運行結果爲:
這裏寫圖片描述

關聯數組(索引和關聯兩個詞都是針對數組的鍵而言的,索引的鍵是整數,而關聯數組的鍵是字符串):

初始化

<?php
$age=array(
"Bill"=>"35", //"Bill"爲鍵,“35”爲值
"Steve"=>"37",
"Peter"=>"43"
);
echo "Peter is " . $age['Peter'] . " years old.";
?>

運行結果:
這裏寫圖片描述

數組排序

  • sort() - 以升序對數組排序
  • rsort() - 以降序對數組排序
  • asort() - 根據值,以升序對關聯數組進行排序
  • ksort() - 根據鍵,以升序對關聯數組進行排序
  • arsort() - 根據值,以降序對關聯數組進行排序
  • krsort() - 根據鍵,以降序對關聯數組進行排序

PHP函數

自定義函數

簡單實例(與js類似):

<?php
function say() //函數定義
{
    echo 'hello world';
}
say();//函數調用
?>

使用return的關鍵字可以使函數返回值。省略return則返回值爲NULL,返回語句會立即中止函數的運行,函數不能返回多個值,但可以通過一個數組來得到類似的效果。

可變函數

所謂可變函數, 即通過變量的值來調用函數,因爲變量的值是可變的,所以通過改變一個變量的值來實現調用不同的函數。經常會用在回調函數、函數列表、或者根據動態參數來調用不同的函數。可變函數的調用方法爲變量名加括號。

function name(){
    echo 'jobs';
}
$func = 'name';
$func(); //調用可變函數

可變函數也可以用在對象的方法調用上。

class book{
    function getname(){
    return 'bookname';
}
}
$func = 'getname';
$book = new book();
$book ->$func();

內置函數

內置函數指的是PHP默認支持的函數,PHP內置了很多標準的常用的處理函數,包括字符串處理、數組函數、文件處理、session與cookies處理等等。
PHP 的真正力量來自它的函數:它擁有超過 1000 個內置的函數。
通過內置函數str_replace可以實現字符串的替換。下面的例子將“jobs”替換成“steven jobs”:

<?php
$str = 'i am jobs.';
$str = str_replace('jobs', 'steven jobs', $str);
echo $str; //結果爲“i am steven jobs”
?>

另外一些函數是通過其他拓展來支持的,比如mysql數據庫處理函數,GD圖像處理函數,郵件處理函數等,PHP默認加載了一些常用的拓展庫,我們可以安裝或者加載其他拓展庫來增加PHP的處理函數。

注:用function_exists判斷函數是否存在,同樣的method_exists可以用來檢測類的方法是否存在。


PHP 類和對象

PHP是面向對象的(即擁有面向對象的一些特性)。

構造函數

PHP5可以在類中使用__construct()定義一個構造函數,具有構造函數的類,會在每次對象創建的時候調用該函數,因此常用來在對象創建的時候進行一些初始化工作。

class Car{
    function _construct{
     ptint"構造函數被調用\n";
}
}
$car = new Car();//實例化的時候回自動調用構造函數_construc,這裏會輸出一個字符串

注:與c++不同的是,在子類中如果定義了_construc則不會調用父類的_construc,如果需要同時調用父類的構造函數,需要使用parent:_construc()顯式的調用。

同樣,PHP5支持析構函數,使用_destruct()進行定義,析構函數指的是當某個對象的所有引用被刪除,或者對象被顯式的銷燬時會執行的函數。

靜態關鍵字static
使用static修飾的方法稱爲靜態方法,這一點與c++相同,靜態方法屬於類,而不屬於對象,所以調用時使用(類名::方法名)來調用。不允許對象使用->操作符調用。

靜態方法中,$this僞變量不允許使用。可以使用self,parent,static在內部調用方法與屬性。

class Car {
    private static $speed = 10;

    public static function getSpeed() {
        return self::$speed;
    }

    public static function speedUp() {
        return self::$speed+=10;
    }
}
class BigCar extends Car {
    public static function start() {
        parent::speedUp();
    }
}

BigCar::start();
echo BigCar::getSpeed();

重載
PHP中的重載是指冬天的創建屬性與方法,是通過魔術方法來實現的。屬性的重載通過_set,_get,_isset,_unset來分別實現對不存在的屬性值、讀取、判斷屬性是否設置、銷燬屬性。

class Car{
    private $ary = array();
    public function _set($key,$val){
        $this->ary[$key] = $val;
    }
    public function _get($key){
        public function _get($key){
            if(isset($this->ary[$key])){
                return $this->ary[$key];
        }
        return null;            
    }
    public function _isset($key){
        if(isset($this->ary[$key])){return true;}
            return false;
    }
            public fucntion _unset($key){
                unset($this->ary[$key]);
            }
}
$car = new Car();
$car->name = '汽車';//name屬性動態創建並賦值
echo $car->name;

注:PHP允許我們在雙引號串中直接包含字符串變量,而單引號字符串變量中的內容總被認爲是普通字符。
方法的重載通過_call來實現,當調用不存在的方法的時候,將會轉爲參數調用_call方法,當調用調用不存在的靜態方法時會使用_callStatic重載。

class Car {
    public $speed = 0;

    public function __call($name, $args) {
        if ($name == 'speedUp') {
            $this->speed += 10;
        }
    }
}
$car = new Car();
$car->speedUp(); //調用不存在的方法會使用重載
echo $car->speed;

PHP 全局變量

PHP 全局變量 - 超全局變量

PHP 中的許多預定義變量都是“超全局的”,這意味着它們在一個腳本的全部作用域中都可用。在函數或方法中無需執行 global $variable; 就可以訪問它們。
這些超全局變量是:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

$GLOBALS
這種全局變量用於在 PHP 腳本中的任意位置訪問全局變量(從函數或方法中均可)。PHP 在名爲 $GLOBALS[index] 的數組中存儲了所有全局變量。變量的名字就是數組的鍵。
下面的例子展示瞭如何使用超級全局變量 $GLOBALS:

<?php 
$x = 75; 
$y = 25;

function addition() { 
  $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; 
}

addition(); 
echo $z; 
?>

運行結果:
這裏寫圖片描述

PHP $_SERVER
$_SERVER 這種超全局變量保存關於報頭、路徑和腳本位置的信息。
下面的例子展示瞭如何使用 $_SERVER 中的某些元素:

<?php 
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>

運行結果:
這裏寫圖片描述

PHP $_REQUEST

PHP $_REQUEST 用於收集 HTML 表單提交的數據。
下面的例子展示了一個包含輸入字段及提交按鈕的表單。當用戶通過點擊提交按鈕來提交表單數據時, 表單數據將發送到 標籤的 action 屬性中指定的腳本文件。在這個例子中,我們指定文件本身來處理表單數據。如果您需要使用其他的 PHP 文件來處理表單數據,請修改爲您選擇的文件名即可。然後,我們可以使用超級全局變量 $_REQUEST 來收集 input 字段的值:

<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>

<?php 
$name = $_REQUEST['fname']; 
echo $name; 
?>

</body>
</html>

運行結果:
這裏寫圖片描述

點擊提交結果:
這裏寫圖片描述

發佈了16 篇原創文章 · 獲贊 38 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章