由于 PHP 代碼書寫的靈活性,每個(gè)人都有自己的書寫習(xí)慣,避免低效的書寫方式秘血,是一個(gè)有追求的程序員的義務(wù)。
- 字符串使用單引號(hào)
''
包裹仔涩。雙引號(hào)會(huì)去查找字符串中的變量粘舟,并解析佩研。 - 使用雙引號(hào)帶變量的方式處理字符串鏈接
"this is a $string"
旬薯,避免使用.
操作符鏈接字符串适秩。.
每次鏈接都需要重新分配內(nèi)容空間存儲(chǔ)字符串。 - 所有變量使用前必須先定義骤公,獲取未定義的變量效率低下扬跋。
- 遞增局部變量的速度最快。比全局變量快 2 倍洒试,比類屬性快 3 倍彪见,比未定義的變量快 9 倍。
- 盡可能靜態(tài)化函數(shù)捕犬,靜態(tài)化的函數(shù)調(diào)用性能遠(yuǎn)高于普通函數(shù)酵镜。
-
$data['id']
的速度比$data[id]
的速度快得多。 - 在 for 循環(huán)之前確定最大循環(huán)次數(shù)垢粮, 不要每次循環(huán)時(shí)計(jì)算最大值靠粪。
- 及時(shí)注銷不使用的大數(shù)據(jù)變量,以便釋放內(nèi)存昔善。
- 盡量避免使用
__get
畔乙、__set
、__autoload
等魔術(shù)方法的使用返咱。 -
include
、require
文件時(shí)盡量使用絕對(duì)路徑评姨,相對(duì)路徑最終都是解析成絕對(duì)路徑楞艾,并且當(dāng)include
或require
文件時(shí)沒有給出目錄,則程序會(huì)去 include_path 中查找文件蕴侧,找不到才報(bào)出警告或錯(cuò)誤两入。 - 盡可能使用函數(shù)操作來代替正則表達(dá)式。
-
str_replace
函數(shù)比preg_replace
函數(shù)快择葡,strtr
函數(shù)的效率是str_replace
函數(shù)的四倍剃氧。 - 用
@
屏蔽錯(cuò)誤消息的做法非常低效,且不易查找錯(cuò)誤已添,應(yīng)禁止使用滥酥。 - 使用
switch ... case
的結(jié)構(gòu)來代替if ... elseif ... else
,性能更高些缆蝉。 - 使用
foreach
代替while
瘦真、for
循環(huán),foreach
效率更高原杂。 - 使用
isset()
代替is_empty()
判斷變量是否存在弦讽。判斷字符串長(zhǎng)度也可以使用isset()
,如:
$str = 'abc';
var_dump(isset($str{2})); // true
var_dump(strlen($str) < 3); // false
- 用
i += 1
代替i = i + 1
被碗,效率更高仿村。 - 遞增或遞減時(shí),使用
++$i
或--$i
效率更高焚志。++$i
更快是因?yàn)樗恍枰?3 條指令(opcodes)畏鼓,$i++
則需要 4 條指令。后置遞增實(shí)際上會(huì)產(chǎn)生一個(gè)臨時(shí)變量膳沽,這個(gè)臨時(shí)變量隨后被遞增让禀。而前置遞增直接在原值上遞增。這是最優(yōu)化處理的一種痛阻,正如 Zend 的 PHP 優(yōu)化器所作的那樣腮敌。 - 盡可能的使用 PHP 內(nèi)置函數(shù)。
- 不要在類的構(gòu)造函數(shù)
__contruct()
中寫入過多的業(yè)務(wù)邏輯斗这,這樣導(dǎo)致每次創(chuàng)建這個(gè)類對(duì)象時(shí)都會(huì)執(zhí)行構(gòu)造函數(shù)中的代碼表箭。 - 獲取當(dāng)前的腳本運(yùn)行時(shí)間可以直接獲取
$_SERVER['REQUSET_TIME']
優(yōu)于time()
钮莲。 - 使用
ip2long()
和long2ip()
函數(shù)把IP地址轉(zhuǎn)成整型存放進(jìn)數(shù)據(jù)庫(kù)而非字符型。 - 不要隨便就復(fù)制變量极舔, 如將一個(gè)長(zhǎng)名稱變量復(fù)制到一個(gè)短名稱的變量中链瓦,這很容易導(dǎo)致內(nèi)存浪費(fèi)盯桦。