1. 程式人生 > >從零開始的PHP生活Day1

從零開始的PHP生活Day1

PHP

什麼是PHP?

PHP(Hypertext Preprocessor,超文字前處理器)是一種伺服器端的、跨平臺的、HTML嵌入式的弱型別開源指令碼語言。

1、伺服器端:PHP需要使用伺服器軟體進行編譯。

2、跨平臺:PHP支援多種作業系統平臺,並且能夠被多種伺服器軟體編譯。

3、HTML嵌入式:PHP程式碼是編寫在HTML程式碼中的。

4、弱型別:PHP定義變數時不需要指明資料型別。

5、開源:即開發原始碼,PHP的原始碼是向所有人公開的。

6、指令碼語言:PHP是以指令碼的方式進行編譯的,即只在被呼叫時進行編譯。

安裝環境

下載phpstudy 安裝路徑不要有空格和漢字

下載vscode

安裝外掛漢化包

  • Beautify 用來格式化html js css程式碼

  • Bracket Pair Colorrizer 用來區分括號

  • Chinese(Simplified) Language 漢化

  • Code Runner 用於執行程式碼

  • Code Spell Checker 用於檢測程式碼語法

  • Open in browser 用於在瀏覽器中開啟html檔案

  • PHP Debug 用於在程式中打斷點檢測

  • VS Color Picker 用於採集資訊

  • vscode-fileheader 用於生成自定義檔案頭資訊

1545316474232.png

hello.php

<?php
  echo 'Hello World'; 
 ?>  

1545316531689.png

放在網站根目錄 然後瀏覽器訪問http://localhost:8080/hello.php

如果出現Hello World 那麼恭喜你!!

php標記

XML風格的標記 預設


### 指令碼風格的標記

```

簡短風格標記

<? ?>

ASP風格的標記

<% %>

php註釋

單行註釋

<?php
      echo '這是單行註釋';    //顯示資訊。
  ?>

多行註釋

 <?php
  ​
      /*這是
  ​
      多行
  ​
      註釋。*/
  ​
      echo '這是多行註釋';
  ​
  ?>

Shell註釋

<?php
      header("content-Type:text/html; charset=gb2312");
  ​
      echo '這是Shell註釋';    #顯示資訊。
  ​
  ?>

php輸出

echo

echo 來輸出一個或多個字串

void echo(string $arg1[, string $…]);

echo沒有返回值,其中“$arg1”和“$…”為一系列要輸出的字串物件。

 <?php
  ​
      echo '使用echo輸出字串';    //使用echo輸出字串。
  ​
  ?>

print

print”來輸出一個字串

int print(string $arg);

print的返回值總為“1”,其中“$arg”為要輸出的字串物件。

      print '使用print輸出字串';    //使用print輸出字串。
  ?>

print和echo的作用基本一樣,兩者之間的區別在於echo沒有返回值而print總是返回“1”,因此echo的執行速度相對來說稍快一些。

printf()

printf()”函式來輸出格式化的字串,語法格式如下:

int printf(string $format[, mixed $arg1[, mixed $…]]);

printf()函式的返回值為字串長度,其中“$format”為需要輸出的字串,其中需要使用型別指示符來指明輸出的格式;“$arg1”和“$…”為可選引數,用於指定一系列要輸出的物件。

常用的型別指示符

指示符 描述
%b 將引數當作整數,並顯示為二進位制數
%c 將引數當作整數,並顯示為對應的ASCII字元
%d 將引數當作整數,並顯示為有符號的十進位制數
%f 將引數當作浮點數,並顯示為浮點數
%o 將引數當作整數,並顯示為八進位制數
%s 將引數當作字串,並顯示為字串
%u 將引數當作整數,並顯示為無符號的進位制數
%x 將引數當作整數,並顯示為小寫的十六進位制數
%X 將引數當作整數,並顯示為大寫的十六進位制數
  <?php
  ​
      $num1 = 1;    //定義一個整型變數。
  ​
      $num2 = 2;    //定義一個整型變數。
  ​
      //計算“$num1”與“$num2”之和。
  ​
      $sum = $num1 + $num2;
  ​
      //使用printf()函式輸出格式化的字串。
  ​
      printf('%d + %d = %d', $num1, $num2,$sum);
  ​
  ?>

print_r()函式來輸出陣列結構

bool print_r(mixed $expression[, bool $return]);

其中“$expression”為需要輸出的陣列物件;“$return”為可選引數,用於指定函式的返回值,預設值為“false”表示返回“1”,並直接輸出資料結構,若設定為“true”則表示返回一個由資料結構組成的字串。

  <?php
  ​
      $arr = array('this', 'is', 'an', 'array');    //定義一個數組變數。
  ​
      print_r($arr);    //使用print_r()函式輸出陣列結構。
  ​
  ?>

如果“$expression”為整型或字串等型別的變數,則輸出該變數本身;如果“$expression”為陣列,則按鍵值和元素的順序輸出該陣列中的所有元素。

標量資料型別

boolean

布林型(boolean)資料型別用於存放一個真(true)或假(false)值,其中“true”和“false”為PHP的內部關鍵字。

布林資料型別主要用於應用程式的邏輯運算,大多使用在條件控制語句或迴圈控制語句的條件表示式中。

在PHP中不僅僅只有boolean值“false”為假,在一些特殊情況下某些非boolean也會被認為是假,例如:“0”、“0.0”、“'0'”、空白字串('')和只有宣告卻沒有賦值的陣列等。

 <?php
  ​
      $boo = true;    //定義一個布林型變數,並賦值為“true”。
  ​
      //判斷$boo的值是否為“true”。
  ​
     if ($boo == true)
  ​
          echo '變數$boo為真';    //顯示資訊。
  ​
     else
  ​
          echo '變數$boo為假';    //顯示資訊。
  ​
  ?>

string

字串型(string)資料型別用於存放一個連續的字元序列,即由一連串字元組成的字串,而這些字元可以是數字字母漢字符號

在PHP中定義字串的方法有單引號(')、雙引號(")和界定符(<<<)三種。

單引號

使用單引號定義字串,即使用一對 ' 將字串的字元包含在內。

  <?php
  ​
      //定義一個字串型變數,並賦值為“this is a string”。
  ​
      $str = 'this is a string';
  ​
      echo $str;    //顯示資訊。
  ​
  ?>

雙引號

使用雙引號定義字串,即使用一對 " 將字串的字元包含在內。

<?php
  ​
      //定義一個字串型變數,並賦值為“this is a string”。
  ​
      $str = "this is a string";
  ​
      echo $str;    //顯示資訊。
  ​
  ?>

區別在於:

1、需要轉義的字元不同:在單引號定義的字串中,只需要對單引號 ' 進行轉義;而在雙引號定義的字串中,還需要對雙引號 " 、美元符號 $ 等關鍵字元進行轉義

2、變數的輸出方式不同:使用單引號定義的字串中所包含的變數會按照普通字串輸出;而使用雙引號定義的字串中所包含的變數會被自動替換為變數的值

  <?php
  ​
      //定義一個字串型變數,並賦值為“this is a string”。
  ​
      $str = 'this is a string';
  ​
      echo '使用單引號輸出:$str';    //顯示資訊。
  ​
      echo '<br/>';    //換行。
  ​
      echo "使用雙引號輸出:$str";   //顯示資訊。
  ​
  ?>

1545314316426.png

界定符

使用界定符定義字串,即使用一對 <<<str str; 將字串的字元包含在內,其中 str 為指定的識別符號。

<?php
      //定義一個字串型變數,並賦值為“this is a string”。
  ​
      $str = <<<std
  ​
      this is a string
  ​
  std;
  ​
      echo $str;    //顯示資訊。
  ​
  ?>

識別符號前如果出現其他符號或字元時會發生錯誤,因此結束識別符號必須單獨另起一行,且不允許有空格。

integer

整型(integer)資料型別用於存放整數,且只能存放整數,存放的整數可以為正數負數,也可以用十進位制八進位制十六進位制來表示。

如果需要用八進位制來表示整型,那麼數字的前面必須加上“0”;而如果需要用十六進位制來表示整型,那麼數字的前面必須加上“0x”

如果在八進位制中出現了非法數字(8和9),那麼非法數字及其後的所有數字都會被忽略掉。

如果數值超過整型所能表示的最大範圍(32位作業系統中最大的整型數值為2147483647,64位作業系統中最大的整型數值為9223372036854775807),就會被當作浮點型處理,而這種情況被稱為整數溢位。

 <?php
  ​
      //定義一個用十進位制表示的整型變數。
  ​
      $num1 = 1234567890;
  ​
      //定義一個用八進位制表示的整型變數。
  ​
      $num2 = 01234567890;
  ​
      //定義一個用八進位制表示的整型變數。
  ​
      $num3 = 01234567;
  ​
      //定義一個用十六進位制表示的整型變數。
  ​
      $num4 = 0x1234567890;
  ​
       //顯示資訊。
  ​
      echo '數值1234567890不同進位制的輸出結果:<br/>';
  ​
      echo '十進位制的輸出結果:'.$num1.'<br/>';
  ​
      echo '第一個八進位制的輸出結果:'.$num2.'<br/>';
  ​
      echo '第二個八進位制的輸出結果:'.$num3.'<br/>';
  ​
      echo '十六進位制的輸出結果:'.$num4;
  ​
  ?>

float

浮點型(float)資料型別用於存放數值,這個數值可以是超過整型範圍的整數,也可以是小數。而浮點型數值的書寫格式有兩種:

1、標準格式:如3.1415、-34.56。

2、科學計數格式:如3.456E1、987.65E-3。

在PHP中浮點型數值只是一個近似值,要儘量避免在浮點型數值之間進行大小比較,因為比較的結果往往是不準確的。

  <?php
  ​
      //用標準格式定義一個浮點型變數。
  ​
      $num1 = 3.14159265359;
  ​
      //用科學計數格式定義一個浮點型變數。
  ​
      $num2 = 314159265359E-11;
  ​
      //顯示資訊。
  ​
      echo '圓周率的兩種書寫格式:<br/>';
  ​
      echo '標準格式:'.$num1.'<br/>';
  ​
      echo '科學計數格式:'.$num2;
  ​
  ?>

複合資料型別

複合資料型別儲存的是按照一定規則組成的元素型別的資料

在PHP中,可以使用array和object兩種複合資料型別。

陣列(array)

陣列(array)是一組資料的集合,即將一系列資料組織起來,形成一個可操作的整體,這些資料可以是標量資料陣列物件資源等。

陣列中的每個資料都被稱為一個“元素”,元素包括“索引(鍵名)”和“值”兩個部分,而在PHP中索引可以由數值(數字索引)或字串(關聯索引)組成,而值則可以是多種資料型別

在PHP中,定義陣列的語法格式有三種:

1、$array = array('value1', 'value2',……);

2、$array[key] = 'value';

3、$array = array(key1 => 'value1',key2 => 'value2', ……);

其中,“key”為陣列元素的索引,“value”為陣列元素的值。

<?php
  ​
      $arr1 = array('this', 'is', 'an','array');    //定義一個數組。
  ​
      print_r($arr1);    //輸出陣列結構。
  ​
      echo '<br/>';    //換行。
  ​
      //定義一個數組。
  ​
      $arr2[0] = 'this';
  ​
      $arr2[1] = 'is';
  ​
      $arr2[2] = 'an';
  ​
      $arr2[3] = 'array';
  ​
      print_r($arr2);    //輸出陣列結構。
  ​
      echo '<br/>';    //換行。
  ​
      //定義一個數組。
  ​
      $arr3 = array(0 => 'this', 1=> 'is', 2 => 'an', 3 => 'array');
  ​
      print_r($arr3);    //輸出陣列結構。
  ​
  ?>

物件(object)

物件(object)就是一組資料和與這組資料相關的操作封裝在一起而形成的一個實體。

特殊資料型別

在PHP中,可以使用resource和null兩種特殊資料型別。

資源(resource)

資源(resource)是一種特殊變數,又稱為“控制代碼”,是對外部資源的一個引用,即需要通過專門的函式來建立和使用,主要用於檔案操作、連線資料庫或建立圖形畫布區域等。

在PHP中,系統會自動啟動垃圾回收機制,即自動釋放不再使用的資源,避免記憶體被消耗殆盡,提高應用程式的執行速度。因此,PHP很少需要手工釋放資源。

空值(null)

空值(null)表示沒有為變數設定任何值。在PHP中,變數為空值的情況有三種:

1、在定義變數時,沒有為變數賦任何值。

2、變數被賦值為空值。

3、被“unset()”函式處理過的變數。

在PHP中,空值不區分大小寫,即“null”和“NULL”的效果是一樣的。

  <?php
  ​
      $null1;    //定義一個變數,但不為其賦值。
  ​
      if (is_null($null1))    //判斷變數是否為空值。
  ​
          echo '$null1為空值。<br/>';   //顯示結果。
  ​
      $null2 = null;    //定義一個變數,併為其賦空值。
  ​
      if (is_null($null2))    //判斷變數是否為空值。
  ​
          echo '$null2為空值。<br/>';   //顯示結果。
  ​
      $null3 = '空值';    //定義一個變數,併為其賦為“空值”。
  ​
      unset($null3);    //釋放變數$null3。
  ​
      if (is_null($null3))    //判斷變數是否為空值。
  ​
          echo '$null3為空值。';    //顯示結果。
  ​
  ?>

檢測資料型別

有時根據功能要求,需要檢測某個資料屬於哪種型別,這時可以通過檢測資料型別函式分別針對不同資料型別的資料進行檢測,從而判斷資料是否屬於某個資料型別,即如果符合返回true,否則返回false

針對上述八種資料型別,PHP分別提供了九種基本的檢測資料型別的函式:

1、“is_bool()”函式:檢測變數是否屬於布林型。

2、“is_string()”函式:檢測變數是否屬於字串型。

3、“is_numeric()”函式:檢測變數是否是由數字組成的字串。

4、“is_integer()”函式:檢測變數是否屬於整型。

5、“is_float()”函式:檢測變數是否屬於浮點型。

6、“is_null()”函式:檢測變數是否為空值。

7、“is_array()”函式:檢測變數是否屬於陣列型別。

8、“is_object()”函式:檢測變數是否屬於物件型別。

9、“is_resource()”函式:檢測變數是否屬於資源型別。

  <?php
      $boo = true;    //定義一個布林型變數。
  ​
      if (is_bool($boo))    //判斷變數是否屬於布林型。
  ​
          echo '$boo為布林型。<br/>';   //顯示結果。
  ​
      $str = '123';    //定義一個字串型變數。
  ​
      if (is_string($str))    //判斷變數是否屬於字串型。
  ​
          echo '$str為字串型。<br/>';   //顯示結果。
  ​
      //判斷變數是否是由數字組成的字串。
  ​
      if (is_numeric($str))
  ​
          //顯示結果。
  ​
          echo '$str是由數字組成的字串。<br/>';
  ​
      $num1 = 123;    //定義一個整型變數。
  ​
      if (is_integer($str))    //判斷變數是否屬於整型。
  ​
          echo '$num1為整型。<br/>';   //顯示結果。
  ​
      $num2 = 1.23;    //定義一個浮點型變數。
  ​
      if (is_float($num2))    //判斷變數是否屬於浮點型。
  ​
          echo '$float為浮點型。<br/>';   //顯示結果。
  ​
      $null;    //定義一個變數,但不為其賦值。
  ​
      if (is_null($null))    //判斷變數是否為空值。
  ​
          echo '$null為空值。<br/>';   //顯示結果。
  ​
      $arr = array('this', 'is', 'an', 'array');    //定義一個數組。
  ​
      if (is_array($arr))    //判斷變數是否屬於陣列型別。
  ​
          echo '$arr為陣列。';    //顯示結果。
  ​
  ?>

轉換資料型別

雖然PHP是一種弱型別的語言,但在實際應用中有時仍需要轉換資料型別。在PHP中,轉換資料型別的方法有兩種:

1、在變數前加上括號,並在括號中寫入型別名稱。

2、使用“settype()”函式轉換資料型別,語法格式如下:

bool settype(mixed $var, string $type);

settype()函式的返回值為布林值,即轉換成功返回“true”,否則返回“false”。其中“$var”為需要改變資料型別的變數;“$type”為需要變成的資料型別。

  <?php
  ​
      $str = '123.456';    //定義一個字串型變數。
  ​
      $num = (float)$str;    //將字串型變數轉換為浮點型。
  ​
      if (is_float($num))    //判斷變數是否屬於浮點型。
  ​
          echo '$num為浮點型。<br/>';   //顯示結果。
  ​
      echo '$num = '.$num.'<br/>';    //顯示結果。
  ​
      //將浮點型變數轉換為整型。
  ​
      $boo = settype($num, 'integer');
  ​
      if ($boo)    //判斷是否轉換成功。
  ​
          echo '轉換成功!<br/>';   //顯示結果。
  ​
     else
  ​
          echo '轉換失敗!<br/>';   //顯示結果。
  ​
      if (is_integer($num))    //判斷變數是否屬於整型。
  ​
          echo '$num為整型。<br/>';   //顯示結果。
  ​
      echo '$num = '.$num;    //顯示結果。
  ​
  ?>

轉換資料型別時,是從最左邊的一個字元開始進行轉換,並只轉換符合說要轉換型別要求的部分,即如果出現非法字元,非法字元及其後的字元都會被忽略掉,比如:浮點型變數轉換為整型時,小數部分會被捨去;字串型變數轉換為整型或浮點型時,如果以數字開頭就擷取到非數字位,否則為“0”。

將變數轉換成布林型時,“null”和“0”會被轉換為“false”,其他則轉換為“true”;而布林型變數轉換為整型時,“false”轉換為“0”,“true”轉換為“1”。

常量(重點)

常量存放的是值不變化的、固定的資料,即在指令碼的其他任何位置都不能修改常量的值,比如:圓周率、自然對數底和牛頓引力等。

宣告常量

在PHP中,需要使用“define()”函式來宣告常量,語法格式如下:

bool define(string $name, mixed $value[, bool $case_insensitive]);

“define()”函式,如果宣告成功則返回“true”,否則返回“false”。其中“$name”為常量名;“$value”為常量值;“$case_insensitive”為可選引數,用於指定常量名是否大小寫敏感。

使用常量

在PHP中,獲取常量的值有兩種方法:

(1)使用常量名直接獲取常量值。

(2)使用“constant()”函式獲取常量值,語法格式如下:

mixed constant(string $name);

constant()函式的返回值為常量值。其中“$name”為常量名或儲存常量名的變數。

如果常量未定義,使用constant()函式獲取常量值時,系統會報出錯誤提示,因此通常使用constant()函式之前需要判斷常量是否已經定義。

constant()函式和直接使用常量名輸出的效果是一樣的,但是使用constant()函式可以通過變數動態地輸出不同的常量值,在使用上要靈活很多。

判斷常量是否被定義

在PHP中,使用“defined()”函式判斷常量是否被定義,語法格式如下:

bool defined(string $name);

“defined()”函式,如果常量已經被定義則返回“true”,否則返回“false”。其中“$name”為常量名或儲存常量名的變數。

 <?php
  ​
      define(CONSTANT, '常量');    //定義一個常量。
  ​
      //定一個字串型變數,存放常量名。
  ​
      $name = 'CONSTANT';
  ​
      echo CONSTANT. '<br/>';    //顯示結果。
  ​
      //判斷常量是否被定義。
  ​
     $boo = defined($name);
  ​
     if ($boo)
  ​
      {
  ​
          echo '常量已被定義!<br/>';   //顯示結果。
  ​
          echo constant($name);    //顯示結果。
  ​
      }
  ​
  ?>

預定義常量

在PHP中,除了可以宣告自定義常量外,還可以使用預定義常量來獲取PHP中的資訊,常用的預定義常量如下表所示。

預定義常量 描述
FILE 預設常量,PHP程式檔名
LINE 預設常量,PHP程式行數
PHP_VERSION 內建常量,PHP程式的版本
PHP_OS 內建常量,執行PHP解析器的作業系統名稱
TRUE 真值
FALSE 假值
NULL 空值
E_ERROR 指到最近的錯誤處
E_WARNING 指到最近的警告處
E_PARSE 指到解析語法有潛在問題處
E_NOTICE 發生不尋常處的提示,但不一定是錯誤處

FILE”和“LINE”中的“__”是兩條下劃線,而不是一條下劃線。

表中以“E_”開頭的預定義常量是PHP的錯誤除錯部分。如需詳細瞭解,請參考“error_reporting()函式”。

使用預定義常量的方法與使用自定義常量的方法相同,沒有什麼差別。

變數(重點)

變數與常量正好相反,它用於存放的是可變的資料,即在程式執行過程中變數的值可以發生變化

宣告和使用變數

在宣告變數時,系統會為程式中的每一個變數分配一個儲存單元,這些變數都是使用“變數名”來標識,即變數名實質上就是計算機記憶體單元的名稱,因此通過變數名即可訪問記憶體中的資料。

在PHP中,使用變數之前並不需要進行宣告,即只需要為變數賦值,而PHP的變數名用“$”和識別符號表示,且區分大小寫。

變數名的識別符號不能以數字字元開頭,也不能以字母和下劃線以外的其他字元開頭。

變數賦值就是給變數一個具體的資料值,通常是通過賦值運算子來實現的,在PHP中為變數賦值的方法有三種:

1、直接賦值:直接將資料值賦值給變數。

2、變數間賦值:將一個變數的資料值賦值給另一個變數。

3、引用賦值:使用“&”符號將一個變數的記憶體地址傳給另一個變數,即再為該記憶體中的資料起一個“別名”。當改變其中一個變數的值時,另一個變數也會跟著發生變化。

變數間賦值和引用賦值之間的區別在於,變數間賦值是開闢一個新的記憶體空間,並複製原變數內容;引用賦值這是給原變數內容另起一個變數名,二者使用的是同一記憶體空間。‍‍

  <?php
  ​
  ​
      $str1 = 'str1';    //直接賦值。
  ​
     echo '$str1的值:'.$str1.'<br/>';    //顯示結果。
  ​
      $str2 = $str1;    //變數間賦值。
  ​
     echo '$str2的值:'.$str2.'<br/>';    //顯示結果。
  ​
      $str3 = & $str1;    //引用賦值。
  ​
     echo '$str3的值:'.$str3.'<br/>';    //顯示結果。
  ​
      $str1 = 'str2';    //修改變數的值。
  ​
     echo '$str1的值:'.$str1.'<br/>';    //顯示結果。
  ​
     echo '$str2的值:'.$str2.'<br/>';    //顯示結果。
  ​
     echo '$str3的值:'.$str3;    //顯示結果。
  //定義一個值為“str1”變數“$str1”,然後將該變數的值賦值給另一個變數“str2”,再將該變數引用給另一個變數“$str3”,最後輸出結果。
  ?>

變數的作用域

變數的作用域是指能夠使用變數的有效範圍變數必須在其有效範圍內使用,否則就會失去其意義。在PHP中,變數的作用域有三種:

1、區域性變數:變數定義在函式內部,其作用域為所在函式。

注意:區域性變數在函式呼叫結束以後,其儲存的資料就會被立即清除,記憶體空間也會被釋放。

2、全域性變數:變數定義在所有函式以外,其作用域為整個PHP檔案。

注意:如果需要在自定義函式內部使用全域性變數,那麼則要使用關鍵字“global”在呼叫全域性變數時進行宣告。

3、靜態變數:能夠在函式呼叫結束之後保留變數值,當再次回到其作用域時,可以繼續使用保留的變數值。

注意:靜態變數需要使用關鍵字“static”來進行宣告。

  <?php
  ​
      //定義一個全域性變數。
  ​
      $str = '全域性變數:在函式以外輸出。';
  ​
      //定義一個自定義函式。
  ​
     function example()
  ​
      {
  ​
          //定義一個區域性變數。
  ​
          $str = '區域性變數:呼叫函式時輸出。';
  ​
          echo $str.'<br/>';    //顯示結果。
  ​
      }
  ​
      example();    //呼叫函式。
  ​
     echo $str;    //顯示結果。
  //在函式內外定義並輸出變數名相同的區域性變數“區域性變數:呼叫函式時輸出”和全域性變數“全域性變數:在函式以外輸出”。
  ?>
  <?php
  ​
  ​
      $str = '全域性變數';    //定義一個全域性變數。
  ​
      //定義一個自定義函式。
  ​
     function example()
  ​
      {
  ​
          echo '直接使用全域性變數:'.$str.'<br/>';    //顯示結果。
  ​
          global $str;    //使用關鍵字“global”呼叫全域性變數。
  ​
          echo '通過global使用全域性變數:'.$str;    //顯示結果。
  ​
      }
  ​
      example();    //呼叫函式。
  //在自定義函式內使用並輸出值為“全域性變數”的全域性變數。
  ?>
  <?php
  ​
      //設定編碼格式,正確顯示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //定義一個自定義函式。
  ​
     function example1()
  ​
      {
  ​
          $num = 0;    //定義一個普通變數。
  ​
          $num++;    //遞增。
  ​
          echo $num.' ';    //顯示結果。
  ​
      }
  ​
      //定義一個自定義函式。
  ​
     function example2()
  ​
      {
  ​
          static $num = 0;    //定義一個靜態變數。
  ​
          $num++;    //遞增。
  ​
          echo $num.' ';    //顯示結果。
  ​
      }
  ​
      echo '普通變數輸出:';    //顯示結果。
  ​
      //迴圈10次。
  ​
      for ($i = 0; $i < 10; $i++)
  ​
      {
  ​
          example1();    //呼叫函式。
  ​
      }
  ​
      echo '<br/>靜態變數輸出:';    //顯示結果。
  ​
      //迴圈10次。
  ​
      for ($i = 0; $i < 10; $i++)
  ​
      {
  ​
          example2();    //呼叫函式。
  ​
      }
  //分別使用普通變數和靜態變數在自定義函式中輸出遞增數字。
  ?>

可變變數

可變變數是一種非常特殊的變數,它允許動態地改變一個變數的名稱,即可變變數的名稱由另一個變數的值來確定。

在PHP中,在變數的前面再加上一個“$”即可實現可變變數。

  <?php
  ​
      //設定編碼格式,正確顯示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      $str1 = 'str2';    //定義一個字串型變數。
  ​
      $str2 = '可變變數';    //定義一個字串型變數。
  ​
      echo '$str1的值:'.$str1.'<br/>';    //顯示結果。
  ​
      echo '$str2的值:'.$str1.'<br/>';    //顯示結果。
  //定義並輸出一個值為“可變變數”的可變變數。
  ?>

‍‍說明:“$$str1”為可變變數,在執行時,首先將“$str1”解析為值“str2”,然後再解析“$str2”,最後將值輸出。‍‍

預定義變數

在PHP中,除了可以使用自定義變數外,還可以使用預定義變數來獲取使用者會話、使用者作業系統環境和本地作業系統環境等資訊,常用的預定義變數如下表所示。

預定義變數 描述
$_SERVER['SERVER_ADDR'] 當前執行指令碼所在伺服器的IP地址
$_SERVER['SERVER_NAME'] 當前執行指令碼所在伺服器的主機名
$_SERVER['SERVER_POST'] 伺服器所使用的埠
$_SERVER['SERVER_SIGNATURE'] 包含伺服器版本和虛擬主機名的字串
$_SERVER['REQUEST_METHOD'] 訪問頁面時的請求方法
$_SERVER['REMOTE_ADDR'] 正在瀏覽當前頁面使用者的IP地址
$_SERVER['REMOTE_HOST'] 正在瀏覽當前頁面使用者的主機名
$_SERVER['REMOTE_PORT'] 使用者連線到伺服器時所使用的埠
$_SERVER['SCRIPT_FILENAME'] 當前執行指令碼的絕對路徑名
$_SERVER['DOCUMENT_ROOT'] 指當前執行指令碼所在的文件根目錄
$_COOKIE 通過HTTPCookie傳遞到指令碼的資訊
$_SESSION 包含與所有會話變數有關的資訊
$_POST 包含通過POST方法傳遞的引數的相關資訊
$_GET 包含通過GET方法傳遞的引數的相關資訊
$GLOBALS 由所有已定義全域性變數組成的陣列

運算子(重點)

算數運算子

算術運算子就是處理算術運算的符號,即對數字資料進行取餘等運算。算術運算子是數字處理中應用最多的、最常用的運算子,PHP中的算術運算子如下表所示。

運算子 說明 示例
+ 加法運算子 $a + $b
- 減法運算子 $a - $b
* 乘法運算子 $a * $b
/ 除法運算子 $a / $b
% 取餘運算子 $a % $b
++ 遞增運算子 $a++、++$a
-- 遞減運算子 $a--、--$a

‍‍說明:使用“%”取餘時,如果被除數($a)是負數,那麼得到的結果也是負數。‍‍

‍‍說明:遞增/遞減運算子有兩種使用方法,一種是將運算子放在變數後面,即先返回變數的當前值,再見變數的當前值增加/減少1;另一種是將運算子放在變數前面,即先將變數增加或減少1,再賦值給原變數。‍‍

``` <?php

  //設定編碼格式,正確顯示中文。

  header("content-Type:text/html; charset=gb2312");

  $num1 = 10;   //定義一個整型變數。

  $num2 = 5;   //定義一個整型變數。

  $num3 = 3;   //定義一個整型變數。

  $num4 = 2;   //定義一個整型變數。

  //顯示結果。

  echo '$num1 = '.$num1.', $num2 = '.$num2. ', $num3 = '.$num3. ', $num4 ='.$num4.'
';

  echo '$num1 + $num2 = '.($num1 + $num2).'
';

  echo '$num1 - $num2 = '.($num1 - $num2).'
';

  echo '$num3 * $num4 = '.($num3 * $num4).'
';

  echo '$num1 / $num4 = '.($num1 / $num4).'
';

  echo '$num1 % $num3 = '.($num1 % $num3).'
';

  echo '$num1++ = '.$num1++.'
';

  echo '$num2-- = '.$num2--.'
';

  echo '++$num3 = '.++$num3.'
';

  echo '--$num4 = '.--$num3;
//使用算術運算子對四個值分別為“10”、“5”、“3”和“2”的變數進行算術運算。
?>

​```

字串運算子

字串運算子的作用是將兩個字串連線起來,並結合成一個新的字串。在PHP中,字串運算子只有一個,即英文句號“.”。

注意:與C語言和Java語言不同,PHP中的“+”只能作為算術運算子使用,而不能作為字串運算子。

  ​
      //設定編碼格式,正確顯示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
     $str1 = '字串';    //定義一個字串型變數。
  ​
     $str2 = '運算子';    //定義一個字串型變數。
  ​
      //顯示結果。
  ​
     echo '$str1 = '.$str1.', $str2 = '.$str2.'<br/>';
  ​
     echo '$str1.$str2 = '.($str1.$str2);
  //使用字串運算子連線值為“字串”和“運算子”兩個字串變數,並輸出組合成的新字串。
  ?>

賦值運算子

賦值運算子的作用是將右邊的值賦值給左邊的變數。PHP中的賦值運算子如下表所示。

運算子 說明 示例 展開形式
= 賦值 $a = $b $a = $b
+= 加賦值 $a += $b $a = $a + $b
-= 減賦值 $a -= $b $a = $a - $b
*= 乘賦值 $a *= $b $a = $a * $b
/= 除賦值 $a /= $b $a = $a / $b
%= 取餘賦值 $a %= $b $a = $a % $b
.= 連線賦值 $a .= $b $a = $a.$b
 <?php
  ​
      //設定編碼格式,正確顯示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
     $num = 1;    //將“1”賦值給變數“$num”。
  ​
     echo '$num = '.$num.'<br/>';   //顯示結果。
  ​
     $num += 1;    //將“$num”加“1”後賦值給“$num”。
  ​
     echo '$num += 1的結果:'.$num.'<br/>';    //顯示結果。
  ​
     $num -= 1;    //將“$num”減“1”後賦值給“$num”。
  ​
     echo '$num -= 1的結果:'.$num.'<br/>';    //顯示結果。
  ​
     $num *= 2;    //將“$num”乘“2”後賦值給“$num”。
  ​
     echo '$num *= 2的結果:'.$num.'<br/>';    //顯示結果。
  ​
     $num /= 2;    //將“$num”除“2”後賦值給“$num”。
  ​
     echo '$num /= 2的結果:'.$num.'<br/>';    //顯示結果。
  ​
      //將“$num”除“2”取餘後賦值給“$num”。
  ​
     $num %= 2;
  ​
     echo '$num %= 2的結果:'.$num.'<br/>';    //顯示結果。
  ​
     $str = '賦值';    //定義一個字串型變數。
  ​
     echo '$str = '.$str.'<br/>';   //顯示結果。
  ​
      //將“$str”連線“運算子”後賦值給“$str”。
  ​
     $str .= '運算子';
  ​
     echo '$str .= \'運算子\'的結果:'.$str;    //顯示結果。
  ​
  ?>

邏輯運算子

邏輯運算子的作用是將多個邏輯命題連線成更復雜的邏輯命題,從而進行實現邏輯判斷,主要用在條件控制語句的判斷表示式中。PHP中的邏輯運算子如下表所示。

運算子 說明 示例 結果為真
&&或and $a && $b或$a and $b $a和$b都為真
||或or $a || $b或$a or $b $a為真或$b為真
xor 異或 $a xor $b $a、$b一真一假
! !$a $a為假

注意:“&&”與“and”、“||”與“or”雖然能夠進行同樣的邏輯運算,但是它們之間的優先順序是不同的。

<?php
  ​
      //設定編碼格式,正確顯示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
     $boo1 = true;    //定義一個布林型變數。
  ​
     $boo2 = false;    //定義一個布林型變數。
  ​
      //顯示結果。
  ​
     echo '$boo1 = '.var_export($boo1, true).', $boo2 = '.var_export($boo2,tru
  ​
  e).'<br/>';
  ​
     echo '$boo1 && $boo2 = '.var_export($boo1 && $boo2,true).'<br/>';
  ​
     echo '$boo1 && $boo1 = '.var_export($boo1 && $boo1,true).'<br/>';
  ​
     echo '$boo2 && $boo2 = '.var_export($boo2 && $boo2,true).'<br/>';
  ​
     echo '$boo1 || $boo2 = '.var_export($boo1 || $boo2, true).'<br/>';
  ​
     echo '$boo1 || $boo1 = '.var_export($boo1 || $boo1, true).'<br/>';
  ​
     echo '$boo2 || $boo2 = '.var_export($boo2 || $boo2, true).'<br/>';
  ​
     echo '$boo1 xor $boo2 = '.var_export($boo1 xor $boo2, true).'<br/>';
  ​
     echo '$boo1 xor $boo1 = '.var_export($boo1 xor $boo1, true).'<br/>';
  ​
     echo '$boo2 xor $boo2 = '.var_export($boo2 xor $boo2, true).'<br/>';
  ​
     echo '!$boo1 = '.var_export(!$boo1, true);
  ​
  ?>

比較運算子(重點)

比較運算子的作用是對變數或表示式的結果進行大小、真假等的比較,如果比較結果為真,則返回“true”,如果比較結果為假,則返回“false”。PHP中的比較運算子如下表所示。

運算子 說明 示例
< 小於 $a < $b
> 大於 $a > $b
<= 小於等於 $a <= $b
>= 大於等於 $a >= $b
== 相等 $a == $b
!= 不等 $a != $b
=== 恆等 $a === $b
!== 非恆等 $a !== $b

說明:恆等“===”表示變數不僅在數值上相等,而且資料型別也是一致的;非恆等“!==”表示變數數值或資料型別不同。

 <?php
  ​
      //設定編碼格式,正確顯示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
     $num = 3;    //定義一個整型變數。
  ​
      //顯示結果。
  ​
     echo '$num = '.$num.'<br/>';
  ​
     echo '$num < 4的結果:'.var_export($num < 4, true).'<br/>';
  ​
     echo '$num > 2的結果:'.var_export($num > 2, true).'<br/>';
  ​
     echo '$num <= 4的結果:'.var_export($num <= 2, true).'<br/>';
  ​
     echo '$num >= 2的結果:'.var_export($num >= 2, true).'<br/>';
  ​
     echo '$num == 3的結果:'.var_export($num == 3, true).'<br/>';
  ​
     echo '$num != 2的結果:'.var_export($num == 2, true).'<br/>';
  ​
     echo '$num === 3的結果:'.var_export($num == 3, true).'<br/>';
  ​
     echo '$num !== \'3\'的結果:'.var_export($num !== '3', true);
  ​
  ?>

錯誤控制運算子(重點)

錯誤控制運算子是PHP中獨特的一種運算子,其作用是對程式中出現錯誤的表示式進行操作,即對錯誤資訊進行遮蔽。在PHP中,在錯誤的表示式前面加上錯誤控制運算子“@”即可遮蔽錯誤資訊。

注意:錯誤控制運算子只能遮蔽錯誤資訊,而不能真正地解決錯誤。因此錯誤控制運算子通常用來遮蔽一些不影響程式執行的非必要錯誤資訊,而影響程式執行的重要錯誤資訊不推薦使用。

  ​
      //設定編碼格式,正確顯示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
     $num1 = (5 / 0);    //定義一個整型變數。
  ​
     $num2 = @ (5 / 0);    //定義一個整型變數。
  ​
  ?>

1545315660799.png

三元運算子

三元運算子,也成為三目運算子,其作用是根據一個表示式在另外兩個表示式中選擇一個來執行,語法格式如下:

表示式1?表示式2:表示式3;

如果表示式1的結果為真,執行表示式2,如果表示式1的結果為假,則執行表示式3。

‍‍說明:三元運算子最好放在括號中使用。‍‍

 <?php
  ​
      //設定編碼格式,正確顯示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //顯示結果。
  ​
     echo (true?'表示式1為真':'表示式1為假');
  ​
      echo '<br/>';
  ​
     echo (false?'表示式1為真':'表示式1為假');
  ​
  ?>

位運算子

位運算子的作用將二進位制位從低位到高位對齊後進行運算。PHP中的位運算子如下表所示。

運算子 說明 示例
& 按位與 $a & $b
| 按位或 $a | $b
^ 按位異或 $a ^ $b
~ 按位取反 ~$a
<< 向左移位 $a << $b
>> 向右移位 $a >> $b
 <?php
  ​
      //設定編碼格式,正確顯示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      $num1 = 13;    //定義一個整型變數。
  ​
      $num2 = 11;    //定義一個整型變數。
  ​
      //顯示結果。
  ​
     echo '$num1 = '.$num1.', $num2 = '.$num2.'<br/>';
  ​
     echo '$num1 & $num2 = '.($num1 & $num2).'<br/>';
  ​
     echo '$num1 | $num2 = '.($num1 | $num2).'<br/>';
  ​
     echo '$num1 ^ $num2 = '.($num1 ^ $num2).'<br/>';
  ​
     echo '~$num1 = '.(~$num1).'<br/>';
  ​
     echo '$num1 << 1 = '.($num1 << 1).'<br/>';
  ​
     echo '$num1 >> 1 = '.($num1 >> 1);
  ​
  ?>

說明:“13”的二進位制原碼為“0000 1101”,“11”的二進位制原碼為“0000 1011”,“9”的二進位制原碼為“0000 1001”,“15”的二進位制原碼為“0000 1111”,“6”的二進位制原碼為“0000 0110”,“-14”的二進位制補碼為“1111 0010”,“26”的二進位制原碼為“0001 1010”。

運算子的優先順序

表示式可能是由多個不同的運算子連線起來的,不同的運算子順序可能得出不同結果,甚至出現錯誤運算錯誤,因此必須按一定順序進行結合,才能保證運算的合理性和結果的正確性、唯一性。

運算子優先順序就是在表示式中哪一個運算子先計算、哪一個後計算,其遵循的規則是:

1、優先順序高的操作先執行,優先順序低的操作後執行。

2、同一優先順序的操作按照從左到右的順序執行。

3、括號內的操作最先執行。

‍‍說明:由於括號的優先順序最高,因此在運算子較多的表示式中,不妨多使用括號。‍‍

運算子的優先順序

優先級別 運算子 結合方向
1 ++、--、~、@
2 !
3 *、/、%
4 +、-
5 <<、>>
6 <、<=、>、>=
7 ==、!=、===、!==
8 &
9 ^
10
11 &&
12
13 ?:
14 =、+=、-=、*=、/=、.=、%=
15 and
16 xor
17 or

‍‍說明:優先級別的數值越小,運算子的優先順序越高。‍‍

表示式和函式

表示式

表示式是通過具體的程式碼來實現的,即由多個符號集合起來組成的程式碼,是構成PHP程式語言的基本元素,也是PHP最重要的組成元素。

組成表示式的符號是對PHP解釋程式有具體含義的最小單元,可以是變數名、函式名、運算子和數值等。

表示式和語句之間的區別在於分號“;”,即一個表示式之後加上一個分號之後就是一條語句

注意:在編寫程式時,必須注意不要漏寫語句的分號“;”。

函式

函式就是將一些需要重複使用的功能程式碼寫在一個獨立的程式碼塊中,並在需要時單獨呼叫

在PHP中,使用關鍵字“function”定義函式,語法格式如下:

functionfun_name([mixed $arg1[, mixed $…]])

{

fun_body;

}

其中“fun_name”為函式名;“$arg1”和“$…”為函式的引數;“fun_body”為函式的主體,即功能實現程式碼。

在函式定義好之後,只需要使用函式名並賦予正確的引數,即可呼叫函式,語法格式如下:

fun_name([mixed $arg1[, mixed $…]]);

其中“fun_name”為函式名;“$arg1”和“$…”為賦予函式的引數。

<?php
  ​
      //設定編碼格式,正確顯示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //定義一個函式。
  ​
      function example($str)
  ​
      {
  ​
          echo $str;    //顯示結果。
  ​
      }
  ​
      example('定義和呼叫函式');    //呼叫函式。
  ​
  ?>

定義函式時,還有一種引數的設定方式,即可選引數,也就是可以指定某個引數為可選引數。在PHP中,將引數放在引數列表末位,並指定其預設值,即可指定可選引數。

呼叫函式時,如果設定了可選引數值,那麼可選引數的值為呼叫時的設定值;如果沒有設定可選引數值,那麼可選引數的值為定義時的預設值。

  <?php
  ​
      //設定編碼格式,正確顯示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //定義一個函式。
  ​
      function example($num1, $num2 =2)
  ​
      {
  ​
          //顯示結果。
  ​
          echo '$num1 = '.$num1.',$num2 = '.$num2.'<br/>';
  ​
          echo '$num1 * $num2 * 2 ='.($num1 * $num2 * 2);
  ​
      }
  ​
      echo 'exmaple(1,3)<br/>';    //顯示結果。
  ​
      example(1, 3);    //呼叫函式。
  ​
      echo '<br/>';    //換行。
  ​
      echo'exmaple(1)<br/>';    //顯示結果。
  ​
      example(1);    //呼叫函式。
  ​
  ?>

資料是如何在函式間傳遞的?

在定義和呼叫函式時存在著兩種引數:形參和實參。形參是定義函式時定義的引數;實參是呼叫函式時傳入的引數。也就是說,呼叫函式時,需要將實參的值傳遞給形參。在PHP中,實參與形參之間資料傳遞的方式有兩種:

1、按值傳遞:按值傳遞就是將實參的值賦值給對應的形參,在函式主體的操作都是針對形參進行,操作的結果不會影響到實參,即函式返回之後,實參的值不會改變

  <?php
  ​
      //設定編碼格式,正確顯示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //定義一個函式。
  ​
      function example($num)
  ​
      {
  ​
          $num *= 2;    //進行算術運算。
  ​
          echo '形參:$num = '.$num.'<br/>';    //顯示結果。
  ​
      }
  ​
      $num = 1;    //定義一個整形變數。
  ​
     echo '實參:$num = '.$num.'<br/>';   //顯示結果。
  ​
      example($num);    //呼叫函式。
  ​
     echo '函式呼叫之後的實參:$num = '.$num;    //顯示結果。
  ​
  ?>

2、按引用傳遞:按引用傳遞就是將實參的記憶體地址傳遞給對應的形參,在函式主體針對形參進行的操作都會影響到實參,即函式返回之後,實參的值會發生改變。引用傳遞引數的方式需要在定義函式時在形參前面加上“&”符號。

<?php
  ​
      //設定編碼格式,正確顯示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //定義一個函式。
  ​
      function example(&$num)
  ​
      {
  ​
          $num *= 2;    //進行算術運算。
  ​
          echo '形參:$num = '.$num.'<br/>';    //顯示結果。
  ​
      }
  ​
      $num = 1;    //定義一個整形變數。
  ​
     echo '實參:$num = '.$num.'<br/>';    //顯示結果。
  ​
      example($num);    //呼叫函式。
  ​
     echo '函式呼叫之後的實參:$num = '.$num;    //顯示結果。
  ​
  ?>

返回函式的操作結果

在實際開發中,經常需要將函式的操作結果返回給呼叫者。在PHP中,通常使用關鍵字“return”來返回函式的操作結果,語法格式如下:

return mixed $value;

“return”會將程式控制權返回到呼叫者的作用域,並將函式的操作結果“$value”返回給呼叫者。

注意:關鍵字“return”只能返回一個值,如果需要函式返回多個值,可以使用陣列來返回值。

注意:如果在全域性作用域中使用關鍵字“return”,那麼會終止指令碼的執行。

變數函式

變數函式和可變變數非常相似,可以通過變數來呼叫,即根據變數的值來呼叫相應的函式。

在PHP中,在變數名後面加上一對小括號,並在其中賦予正確的引數,即可實現變數函式。

  <?php
  ​
      //設定編碼格式,正確顯示中文。
  ​
      header("content-Type:text/html; charset=gb2312");
  ​
      //定義一個函式。
  ​
      function example()
  ​
      {
  ​
          echo '變數函式';    //顯示結果。
  ​
     }
  ​
      $str = 'example';    //定義一個字串型變數。
  ​
     $str();    //呼叫變數函式。
  ​
  ?>

‍‍說明:“$str()”為變數函式,在執行時,首先將“$str”解析為值“example”,然後再呼叫函式“example()”。‍‍

引用函式

<?php
  ​
      //設定編碼格式,正確顯示中文。
  ​
      header("content-Type:text/html;