这个foreach循环负责上帝杀死猫吗?

从采取从https://stackoverflow.com/questions/4891301/top-bad-practices-in-php

这种类似的代码也是杀小猫吗?

foreach (file("longFile.txt") as $line) {
    // ouch! Kitten killed
}

??

对于那些不知道我在说什么的人:

PHP每次进入文件的下一行或是否都收到longFile.txt? 谈论这个代码:

foreach (file("longFile.txt") as $line) {
        // something
}

在链接问题中, for循环通过在每次迭代中调用count来引发性能问题。 foreach使用内部指针遍历传递给它的数组。

在你的例子中, file()将被调用一次,结果数组将被传递给foreach ,它将遍历它,因此小猫被保存。 快乐的星期六!


它不应该杀死任何小猫,因为为了让PHP获得文件的以下行,它必须知道自从上一行被移除后的文件指针的位置。 你只是推进迭代器,它维护对文件对象的引用。

另外,打开这样的文件是不好的做法; 你应该有一个变量来存储它,完成后关闭它。


您想使用Duff设备展开循环:http://de.wikipedia.org/wiki/Duff%E2%80%99s_Device。 这会比foreach更快,然后循环更快,而无需在每次迭代中使用count(),并且它会更快地连接和rtrim字符串,但与使用implode()相同。

链接地址: http://www.djcxy.com/p/10141.html

上一篇: Is this foreach loop responsible for god killing cats?

下一篇: Use keyword in functions