技巧1
不要在循环体里面通过count
、strlen
等函数对一个外部变量进行求值,而应该在循环体外部预先计算并赋值给新的变量,然后在循环体内部使用时引用这个新变量。
这样做的原因是zend引擎在解释执行php代码的时候不会像其他语言那样做代码优化,而总是会按照开发者所书写的那样去执行。
例如代码:
$target = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'];
$flag = true;
for ($i = 0; $i < count($target); $flag && $i++) {
//
}
其他的预编译语言, 它的编译器也许会做优化, 把count
函数提取到前面去,然后再执行循环。而对于PHP来说则不会做这样的优化,那么每一次迭代都会计算一次count
,带来性能上的损耗。
遇到这种情况,我们编写代码的时候,最好将count
计算放到循环体外部计算,赋值给一个新的变量:
$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对程序员的要求更高
待续!