37 php
在foreach循环中使用函数调用是否存在关于效率的问题.例如:
foreach ($this->getValues() as $value) {
//Do something with $value
}
Run Code Online (Sandbox Code Playgroud)
与
$values = $this->getValues();
foreach ($values as $value) {
//Do something with $value
}
Run Code Online (Sandbox Code Playgroud)
从本质上讲,php是聪明的,只能在第一个例子中调用$ this-> getValues()一次,或者在每次迭代时调用它.如果它在每次迭代时调用它,那么它如何跟踪它当前所在的元素,
Wes*_*rch 37
这两者基本相同:
foreach ($this->getValues() as $value) {
//
}
$values = $this->getValues();
foreach ($values as $value) {
//
}
Run Code Online (Sandbox Code Playgroud)
$this->getValues()只运行一次,因为它不在循环内部.如果您需要getValues稍后再次使用返回值,请继续将其分配给变量,这样您就不必再次调用该函数.如果没有,你真的不需要变量.
tda*_*ers 19
可能存在差异,但对于99.9%的实际案例,它可以忽略不计.在任何一种情况下,PHP都只会调用您的函数/方法一次.当你使用内部时发生的事情foreach是PHP评估迭代(前面的部分as)一次,存储结果,然后循环它,将当前元素放入后面给出的局部变量as.如果您自己将iteratee写入本地变量,那么您实际上只是复制了PHP的工作量,因此第一种方法可能会带来额外的开销,但这并不足以让人担心.我会优化可读性:如果函数调用很短并且自我描述,则内联它; 如果它复杂或模糊,则将其存储在描述性变量中.
请注意,情况与典型for和while循环不同,这可能是您从中获得此概念的地方.例如,在以下代码中:
for ($number = 0; $number < $this->getNumberOfItems(); ++$number) {
// do stuff...
}
Run Code Online (Sandbox Code Playgroud)
... getNumberOfItems()每次迭代都会调用该方法.在这种情况下,预先计算并将其存储在局部变量中是有意义的.
| 归档时间: |
|
| 查看次数: |
15545 次 |
| 最近记录: |