Derick Rethans有一篇旧文章说:
请注意,不接受来自 返回引用的函数。在某些情况下,PHP 会得到 混乱并导致很难找到的内存损坏和 调试。将静态值返回为也不是一个好主意 参考,因为 PHP 引擎也有问题。在 PHP 4.3 中, 这两种情况都可能导致PHP很难重现错误和崩溃 和网络服务器。在 PHP 5 中,这工作得更好一些。这里 您可以期待警告,它将"正确"运行。
这是否意味着在 PHP 5 中我们可以忽略函数返回的引用?
我的意思是:
function &GetRef(&$array){
$item =& $array[0];
return $item;
}
$array = array(0, 1, 2);
$item =& GetRef($array); /* Normal usage of the function using assign by reference
also known as "accepting" the reference. */
$item = GetRef($array); /* Notice that here we didn't assign by reference.
Are we allowed to ignore the returned reference
and simply do normal assignment? */
PHP 手册指出:
与参数传递不同,这里[通过引用返回]你必须使用和 在这两个地方 - 指示您要通过引用返回,而不是 一个副本,并指示该引用绑定,而不是通常 作业,应该为$myValue做。
它没有明确说我们必须接受返回的引用。
这是否意味着我们可以自由地忽略返回的引用?
正如评论中所讨论的,您通常应该至少忽略链接文章中的该部分,如果不是整个内容。
本文讨论了 PHP 4.3 上下文中的引用,该上下文于 2002 年 12 月发布,并于 2007 年底 EOL'd。 PHP 4 今天不应该使用。 作为一般规则,在学习使用 PHP 时,您不应该相信任何针对 5.2 之前版本的 PHP 版本(截至 2013 年年中(的文章。
PHP5.0 具有 Zend Engine 2,这是一个运行 PHP 的新虚拟机。 这是实现引用的地方。 5.1 在返回值的操作方面引入了一些向后不兼容的更改。 5.3 引入了真正的垃圾回收,并弃用了调用时按引用传递和按引用分配new
。 史前文章没有涉及这些重要的变化。
这是否意味着在 PHP 5 中我们可以忽略函数返回的引用?
是的。 现代PHP版本丢弃任何函数的返回值都没有问题,无论是否引用。 如果您遇到似乎与此期望相矛盾的行为,请创建一个简化的测试用例并向 PHP 维护者提交错误。
此外,在代码中使用引用之前,请三思而后行。 传递引用不会节省时间,不会节省内存,也不会提高性能,除非在极少数情况下。 谨慎使用它们以控制复杂性。