【发布时间】:2012-07-18 19:30:54
【问题描述】:
可能重复:
In PHP can someone explain cloning vs pointer reference?
根据http://php.net/manual/en/language.oop5.references.php
经常提到的 PHP 5 OOP 的一个关键点是“对象默认通过引用传递”。这并不完全正确。本节通过一些例子来纠正这种普遍的想法。
PHP 引用是一个别名,它允许两个不同的变量写入同一个值。从 PHP 5 开始,对象变量不再包含对象本身作为值。它只包含一个对象标识符,允许对象访问者找到实际对象。当一个对象通过参数发送、返回或分配给另一个变量时,不同的变量不是别名:它们持有标识符的副本,它指向同一个对象。
如果对象通过别名或处理程序传递,那么在什么情况下您实际上希望通过引用传递?
myFunc($obj); // Pass by alias/handler
myFunc(& $obj); // Pass by reference (when would you do this?)
myFunc(clone $obj); // Create a new object
这些都有哪些不同的用例?
【问题讨论】:
-
我认为本次讲座涵盖了以下主题:youtube.com/watch?v=bxxIXPc9IR8(除其他外)
-
注意,调用时传递引用至少从 5.3 开始被弃用,如果不是更早的话。该函数声明它期望哪些参数是引用,调用者不必指定它们是引用——事实上,不应该。
标签: php