自PHP7.0起,foreach循环已被修改,并且设置了新的行为以使引用比以前更快(foreach $ tab为&$ val)。
但是我已经读过很多遍了,引用传递实际上有时比普通循环慢(将$ tab用作$ val)
它总是更快吗?总是慢一些?它是否取决于我们在foreach循环中正在做什么?由于PHP中的引用不是引用,因此令人困惑...我有点讨厌在网络上阅读有关该主题的不同答案,而我无法弄清事实的真相。
感谢您在这里带来一些启发;)
资料来源:https://blog.eduonix.com/web-programming-tutorials/learn-changes-foreach-statement-php-7/ 资料来源:http://php.net/manual/fr/control-structures.foreach.php 资料来源:http://php.net/manual/en/language.references.arent.php ...
答案 0 :(得分:1)
执行摘要:您担心的是不存在的性能问题。
详细信息
PHP使用“ COW”(写时复制)。
正常通过($val
):
foreach
循环或function
主体)想要更改结构的任何部分,则复制该结构。成本与结构的大小成正比。 通过引用传递(&$val
):
设计中的智慧是,PHP在99%的时间内“有效”,和是有效的,用户不需要知道有两种传球技巧。棘手的部分是您需要了解何时进行&$val
这件事。
PHP与几乎所有其他语言相比 。
似乎“传递参数”的方法几乎和语言一样多。
返回问题:
&$val
并通过指针可能会对性能造成微小的影响。答案 1 :(得分:0)
语言设计者只是在尝试处理数组元素大的情况,并直接在源代码中明确说明将要发生的情况。现在,您可以告诉 PHP了,变量$val
将包含对array-element的引用,这意味着将不会重复使用big-value,并且会浪费内存,收集器将没有更多的工作要做,并且源代码清楚地表明了这一点。随后的程序员阅读此语句将确切地知道PHP将要做什么。
当然,引用自然比在内存中复制值更有效。