由于 PHP 代碼書寫的靈活性,每個人都有自己的書寫習慣,避免低效的書寫方式,是一個有追求的程序員的義務。
- 字符串使用單引號
''包裹。雙引號會去查找字符串中的變量,并解析。 - 使用雙引號帶變量的方式處理字符串鏈接
"this is a $string",避免使用.操作符鏈接字符串。.每次鏈接都需要重新分配內(nèi)容空間存儲字符串。 - 所有變量使用前必須先定義,獲取未定義的變量效率低下。
- 遞增局部變量的速度最快。比全局變量快 2 倍,比類屬性快 3 倍,比未定義的變量快 9 倍。
- 盡可能靜態(tài)化函數(shù),靜態(tài)化的函數(shù)調(diào)用性能遠高于普通函數(shù)。
-
$data['id']的速度比$data[id]的速度快得多。 - 在 for 循環(huán)之前確定最大循環(huán)次數(shù), 不要每次循環(huán)時計算最大值。
- 及時注銷不使用的大數(shù)據(jù)變量,以便釋放內(nèi)存。
- 盡量避免使用
__get、__set、__autoload等魔術(shù)方法的使用。 -
include、require文件時盡量使用絕對路徑,相對路徑最終都是解析成絕對路徑,并且當include或require文件時沒有給出目錄,則程序會去 include_path 中查找文件,找不到才報出警告或錯誤。 - 盡可能使用函數(shù)操作來代替正則表達式。
-
str_replace函數(shù)比preg_replace函數(shù)快,strtr函數(shù)的效率是str_replace函數(shù)的四倍。 - 用
@屏蔽錯誤消息的做法非常低效,且不易查找錯誤,應禁止使用。 - 使用
switch ... case的結(jié)構(gòu)來代替if ... elseif ... else,性能更高些。 - 使用
foreach代替while、for循環(huán),foreach效率更高。 - 使用
isset()代替is_empty()判斷變量是否存在。判斷字符串長度也可以使用isset(),如:
$str = 'abc';
var_dump(isset($str{2})); // true
var_dump(strlen($str) < 3); // false
- 用
i += 1代替i = i + 1,效率更高。 - 遞增或遞減時,使用
++$i或--$i效率更高。++$i更快是因為它只需要 3 條指令(opcodes),$i++則需要 4 條指令。后置遞增實際上會產(chǎn)生一個臨時變量,這個臨時變量隨后被遞增。而前置遞增直接在原值上遞增。這是最優(yōu)化處理的一種,正如 Zend 的 PHP 優(yōu)化器所作的那樣。 - 盡可能的使用 PHP 內(nèi)置函數(shù)。
- 不要在類的構(gòu)造函數(shù)
__contruct()中寫入過多的業(yè)務邏輯,這樣導致每次創(chuàng)建這個類對象時都會執(zhí)行構(gòu)造函數(shù)中的代碼。 - 獲取當前的腳本運行時間可以直接獲取
$_SERVER['REQUSET_TIME']優(yōu)于time()。 - 使用
ip2long()和long2ip()函數(shù)把IP地址轉(zhuǎn)成整型存放進數(shù)據(jù)庫而非字符型。 - 不要隨便就復制變量, 如將一個長名稱變量復制到一個短名稱的變量中,這很容易導致內(nèi)存浪費。