为啥 PHP 引用是个坏主意? zvals 和 Copy On Write 是怎么进来的? [关闭]

Posted

技术标签:

【中文标题】为啥 PHP 引用是个坏主意? zvals 和 Copy On Write 是怎么进来的? [关闭]【英文标题】:Why are PHP references a bad idea? How do zvals and Copy On Write come into it? [closed]为什么 PHP 引用是个坏主意? zvals 和 Copy On Write 是怎么进来的? [关闭] 【发布时间】:2014-03-25 08:06:11 【问题描述】:

我最近发现,从内存管理或性能的角度来看,在 php 中使用引用通常(尽管并非总是)是一个坏主意,因为 Copy On Write 以及使用 zvals 在后台表示变量的方式.

有人可以提供更全面的解释吗?我在 Stack Overflow 上看到过这个链接发布了几次:http://schlueters.de/blog/archives/125-Do-not-use-PHP-references.html

我还找到了这个参考资料,它更详细地介绍了 zval 及其工作原理。虽然它是法语的,但谷歌在翻译方面做得很好:http://julien-pauli.developpez.com/tutoriels/php/internals/variables/

我很惊讶没有更多或更好的文档,我想知道是否有任何其他 Stack Overflow 用户遇到过我无法找到的更清晰或更易于访问的文档?

【问题讨论】:

“不要使用引用”是您链接到的文章的底线。现在你的问题是什么? 我的问题是,我在哪里可以找到这方面的好文档?对于 PHP 开发人员来说,这似乎是一个重要的主题,但我只找到了 2 个解释——其中一个是一篇博客文章,它仅部分解释了问题的原因,其中一个虽然有更多细节,但用的是法语。为什么投反对票? 一切使用不当都是个坏主意。引用变量/参数的用例是什么? zerkms - 我引用的文章解释了为什么在 PHP 中使用引用几乎总是一个坏主意,但不是很清楚(第一篇不太详细,第二篇用法语)。我正在寻找的是关于这个主题的一些好的文档。不过,我的问题已经改变,因为这似乎被认为是“离题”。 【参考方案1】:

Sara Golemon 在http://blog.golemon.com/2007/01/youre-being-lied-to.html 有一篇有趣的文章

故事的寓意

当您不需要时通过引用分配值...不是 你比愚蠢的引​​擎更聪明并获得速度和 表现。恰恰相反,是你试图超越引擎 失败了,因为引擎已经比你做得更好了 想想。

还有一些background on zvals in general。但是这两个都有点老了。不知道这些年来发生了多大的变化。

【讨论】:

谢谢。在回答问题方面,我认为第一篇文章最接近并且最容易访问,尽管它更多地关注传递对象以及与 PHP 4 的差异。我看到我的问题已被关闭为题外话,这是最好的答案,所以我将其标记为正确。在我看来,没有任何关于这个主题的更清晰、更官方的文档!

以上是关于为啥 PHP 引用是个坏主意? zvals 和 Copy On Write 是怎么进来的? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

掌握PHP垃圾回收机制

深入理解 PHP7 中全新的 zval 容器和引用计数机制

为啥没有主键的表是个坏主意?

为啥注入 javascript 代码是个坏主意

为啥调用 Process.killProcess(Process.myPid()) 是个坏主意?

为啥 Django 中的只读表单字段是个坏主意?