PHP 5对象是否通过引用传递?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (27)

我似乎无法得到任何一致的信息。不同的消息来源似乎说了不同的事情,并且历史悠久的php.net本身(似乎)并未明确说明这一点 - 尽管,我必须承认,我只是快速浏览一下。

在我传递“重”对象的情况下,我需要通过引用传递,但我不想继续输入:

function foo(TypeName& $obj)

如果我能简单地逃脱

function foo(TypeName $obj)

那标准说什么?

提问于
用户回答回答于

对象通过引用传递(并分配)。不需要使用操作员的地址。

授予我输入的内容过于简单化,但会适合你的目的。该文件指出:

经常提到的PHP5 OOP的一个关键点是“对象通过默认引用传递”。这并不完全正确。本节使用一些例子来整理这个一般思想。 PHP引用是一个别名,它允许两个不同的变量写入相同的值。从PHP5开始,对象变量不再包含对象本身作为值。它只包含一个对象标识符,它允许对象访问器找到实际的对象。当一个对象被参数发送,返回或分配给另一个变量时,不同的变量不是别名:它们包含指向同一对象的标识符的副本。

用户回答回答于

PHP手册

可以通过引用函数来传递变量,以便函数可以修改该变量。语法如下: <?php function foo(&$var) { $var++; } $a=5; foo($a); // $a is 6 here ?>

PHP5的新功能

在PHP 5中,对象模型的基础结构被重写为与对象句柄一起工作。除非通过使用clone关键字显式clone对象,否则将永远不会在对象的场景副本之后创建。在PHP 5中,既不需要通过引用来传递对象,也不需要通过引用来分配对象

因此,只有当你需要使用function foo(&$var)语法时,$ var可能不是一个类的实例。

扫码关注云+社区

领取腾讯云代金券