前言
最近在系統的學習 PHP ,參考的資料是《PHP程式設計》(如果你有好的書籍歡迎推薦給我)。雖然這本書是基於 PHP5 的,但是我筆記裡的程式碼在 PHP7.2 裡是能跑的。另,學習筆記中只記錄我覺得很重要的知識,你可以對照一下看你是否全部瞭解。
大小寫
類、函式、內建的結構以及關鍵字等是不區分大小寫的。(PS:變數區分大小寫)
註釋
PHP 有多種註釋方式,這些方式都是借鑑現有的語言(C、C++、UNIX shell)
其中 shell 風格的註釋使用 #
來標識。
資料型別
PHP 提供八種型別的值或稱為資料型別。
-
四種是標量型(單值)的:整形、浮點數(實數)、字串和布林型。
-
兩種複合型別(集合):陣列和物件。
-
剩下的兩種是特殊型別:資源和 NULL 。
-
十六進位制以
0x
開頭,字母是可以大寫或小寫,但通常是大寫 -
八進位制以
0
開頭。 -
二進位制以
0b
開頭。 -
變數在雙引號中會被解析(解釋),而在單引號中,他們不會被解析:
$name = "Guido"; echo "Hi, $name\n"; // Hi, Guido echo 'Hi, $name'; // Hi, $name
-
在 PHP 中,以下值的計算結果為
false
:- 關鍵字
false
- 整形
0
- 浮點數
0.0
- 空字串
""
和字串"0"
- 空陣列
- 空物件
NULL
值
- 關鍵字
-
定義一個類,就可以用關鍵字
new
建立這個類的任意數量的物件,類的屬性和方法可以通過->
結構訪問。
變數的變數
$foo = "bar";
$$foo = "baz"; //變數bar的值為
變數的引用
在PHP中,引用就是如何建立變數的別名。可以說兩個變數儲存了相同的值。
銷燬其中一個變數的值,不會影響另一個變數的值。
$bigLongVariableName = "PHP";
$short =& $bigLongVariableName;
$bigLongVariableName .= " rocks!";
print "\$short is $short\n"; // $short is PHP rocks!
print "Long is $bigLongVariableName\n"; // Long is PHP rocks!
$short = "Programing $short";
print "\$short is $short\n"; // $short is Programming PHP rocks!
print "Long is $bigLongVariableName\n"; // Long is Programming PHP rocks!
$white = "snow";
$black =& $white;
unset($white);
print $black; //snow
這裡的換行符可能在瀏覽器中顯示不出來,可以參考這篇:如何在 PHP 中換行,解決問題。
變數的作用域
在 PHP 中,只有函式可以提供區域性作用域。與其他語言不同,在 PHP 中不能建立一個作用域是迴圈、條件分支或其他塊型別的區域性變數。也就是說函式外宣告的變數就是全域性變數,他們可以在程式的任何部分被訪問。不過,預設情況下全域性變數在內部函式中是不可訪問的。
為了讓函式訪問全域性變數共有兩個方法:
方法一:使用 global
關鍵字
function updateCounter()
{
global $counter;
$counterr++;
}
$counter = 10;
updateCounter();
echo $counter; // 11
方法二:使用 PHP 中的 $GLOBALS
陣列
function updateCounter()
{
$GLOBALS[counter]++:
}
$counter = 10;
updateCounter();
echo $counter; // 11
隱式轉換
當二元算數操作符是兩個不同的型別時 PHP 會根據需要自動轉換,其中的階梯為:字串 -> 整數 -> 浮點數。
假定一個字串以一個整數或浮點數開始。如果未在字串的開始處發現任何數字,該字串的數值為0。如果字串包含一個點( .
)或大寫/小寫的 e
,對該字串的求值則生成一個浮點數。例如:
"9 Lives" - 1; //8 (整數)
"3.14 Pies" * 2; //6.28 (浮點數)
"9 Lives." -1; //8 (整數)
"1E3 Points of Light" + 1 // 1001 (浮點型)
除法操作符
如果兩個數能整除,則為整數( 4/2
),否則為浮點數( 1/2
)。
自動遞增操作符
在 PHP 中,對字串中使用自動遞增,會相應得到下一個字母。(我測試了一下,只對遞增操作符有效)
$a = "z";
echo ++$a; // "aa"
垃圾收集
PHP 使用引用計數和寫時複製來管理記憶體。
- 寫時複製:保證了變數間複製值不浪費記憶體。
- 引用計數:保證了不在需要時將記憶體釋放給作業系統。
操作符
錯誤遮蔽( @
)
一些操作符或者函式可能產生錯誤資訊,錯誤遮蔽操作符用來阻止這些資訊的產生。
執行( ` )
反引號操作符可以把反引號之間的字串當作shell命令執行,並返回輸出結果:
$listing = `ls`;
echo $listing; // 輸出檔案目錄
型別( instanceof
)
Instanceof 操作符用來測試一個變數是否為給定類的例項化物件,或者是一個介面的實現:
$a = new Foo;
$isAFoo = $a instanceof Foo; // ture
$isABar = $a instanceof Bar; // false
流程控制語句
新的寫法
PHP 支援很多傳統程式設計結構,用來控制程式執行的流程。與傳統的用一對大括號包括的寫法不同, PHP 還提供了另外一種語法。使用一個冒號(:
)作為流程控制語句的結尾,並且以特定的關鍵字作為流程控制語句塊的結尾。
if ($user_balidated){
echo "Welocome!";
$greeted = 1;
}else{
echo "Access Forbidden!";
exit;
}
//等價於
if ($iser_ba;odated): // 這裡不一樣
echo "Welcome!";
$greeted = 1;
else: // //這裡不一樣
echo "Access Forbidden!";
exit;
endif; // 這裡不一樣
這裡僅展示 if
的寫法,其他語句與上面類似。
break 與 continue
PHP 中 break
和 continue
分別代表提前退出一個迴圈和跳到迴圈條件的下一次判斷。不同的是,可以在關鍵詞後面放一個數字,表示 break
要中斷多少層迴圈。以 break
為例:
$i = 0;
$j = 0;
while($i < 10){
while($j < 10){
if ($j == 5){
break 2;
}
++$j;
}
++$i;
}
echo "{$i},{$j}"; // 0,5
和 break
類似,continue
也可以退出多個層次的迴圈。
declare
declare
語句允許指定的一段程式碼執行指令。目前只有兩種 declare
的方式:ticks
和 encoding
指令
ticks
Tick(時間週期)是一個 declare
程式碼段中直譯器每執行 N
條可計時的低階語句就會發生的事件。不是所有語句都可以計時。通常條件表示式和參數列達式都不可計時。
在每個 tick 中出現的事件是由 register_tick_function() 來指定的。注意每個 tick 中可以出現多個事件。
declare(ticks=1); // 每執行一條語句時,tick_handler()就會被執行
// A function called on each tick event
function tick_handler()
{
echo "tick_handler() called\n <br/>";
}
register_tick_function('tick_handler');
$a = 1;
if ($a > 0) {
$a += 2;
print($a);
}
encoding
使用 encoding
指令指定 PHP 指令碼輸出編碼的格式
declare(encoding = "UTF-8");
PS : 這種語句在編譯時要加上 --enable-zend-multibyte
的選項。否則沒有效果。
exit 和 return
指令碼執行到 exit
語句時,就會停止執行。
return
語句一般用於某個函式退出返回,或者指令碼停止執行。
die()
函式時 exit
語句的一個別名。
包含程式碼
PHP 提供兩種方式實現從另外的模組載入程式碼和 HTML 內容:require
和 include
。
require
載入一個不存在的檔案時,會產生一個致命的錯誤,進而指令碼停止執行include
載入一個不存在的檔案時,會產生一個警告哦,不停止指令碼的執行- 如果你多次引用同一個檔案,但是你只想載入一次,可以使用
include_once
和require_once
。
在 Web 頁面中巢狀 PHP
標準( XML )風格
<?php echo "Hello, world"; ?>
SGML 風格
<? echo "Hello, world"; ?>
這種形式被稱為短標籤,預設時關閉的。你可以在編譯時增加 -enable-short-tags
選項,或者在 PHP 配置檔案中開啟 short_open_tag
。
感謝你看到了這裡。如果文章有錯誤,請評論指正,謝謝!
本作品採用《CC 協議》,轉載必須註明作者和本文連結