在PHP中,可以通过在函数声明中的参数前面加上“&”号来通过引用传递函数参数,如下所示:
function foo(&$bar) { // ... }
现在,我知道这 不是 为了提高性能 而 设计的,而是允许函数更改通常不在其范围内的变量。
取而代之的是,PHP似乎使用写时复制来避免在对象被更改之前复制对象(也许还有数组)。因此,对于不更改其参数的函数,效果应与您通过引用传递它们的效果相同。
但是,我想知道写时复制逻辑是否可能在传递引用时短路,并且这是否会对性能产生影响。
ETA:可以肯定的是,我认为它并不快,而且我很清楚这不是引用的目的。 所以我想我自己的猜测很好,我是在寻找一个真正知道内幕下肯定会发生什么的人的答案。在PHP开发的五年中,我总是发现很难通过阅读源代码获得有关PHP内部构件的质量信息。
ZendEngine使用写时复制,当您自己使用引用时,会产生一些额外的开销。但是,仅在撰写本文时才能找到此提及,并且手册中的注释包含其他链接。
(编辑)关于对象和引用的手册页包含有关对象变量与引用如何不同的更多信息。