技巧1
不要在循環(huán)體里面通過(guò)count、strlen等函數(shù)對(duì)一個(gè)外部變量進(jìn)行求值,而應(yīng)該在循環(huán)體外部預(yù)先計(jì)算并賦值給新的變量,然后在循環(huán)體內(nèi)部使用時(shí)引用這個(gè)新變量。
這樣做的原因是zend引擎在解釋執(zhí)行php代碼的時(shí)候不會(huì)像其他語(yǔ)言那樣做代碼優(yōu)化,而總是會(huì)按照開(kāi)發(fā)者所書(shū)寫的那樣去執(zhí)行。
例如代碼:
$target = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'];
$flag = true;
for ($i = 0; $i < count($target); $flag && $i++) {
//
}
其他的預(yù)編譯語(yǔ)言, 它的編譯器也許會(huì)做優(yōu)化, 把count函數(shù)提取到前面去,然后再執(zhí)行循環(huán)。而對(duì)于PHP來(lái)說(shuō)則不會(huì)做這樣的優(yōu)化,那么每一次迭代都會(huì)計(jì)算一次count,帶來(lái)性能上的損耗。
遇到這種情況,我們編寫代碼的時(shí)候,最好將count計(jì)算放到循環(huán)體外部計(jì)算,賦值給一個(gè)新的變量:
$target = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'];
$flag = true;
$targetLen = count($target);
for ($i = 0; $i < $targetLen; $flag && $i++) {
//
}
參考資料:
PHP對(duì)程序員的要求更高
待續(xù)!