有没有必要在对象前面使用&符号?
因为对象现在默认通过引用传递,那么当&$obj
有意义时,是否有一些特殊情况?
对象使用不同的引用机制。 &$object
更多是参考的参考。 你无法真正比较他们两个。 请参阅对象和参考:
PHP引用是一个别名,它允许两个不同的变量写入相同的值。 从PHP 5开始,对象变量不再包含对象本身的值。 它只包含一个对象标识符,它允许对象访问器找到实际的对象。 当一个对象被参数发送,返回或分配给另一个变量时,不同的变量不是别名:它们包含指向同一对象的标识符的副本。
&$object
不是$object
。 我会举一个例子:
foreach ($objects as $object) {
if ($cond) {
$object = new Object(); // This won't affect $objects
}
}
foreach ($objects as &$object) {
if ($cond) {
$object = new Object(); // This will affect $objects
}
}
如果有意义,或者有需要,我不会回答这个问题。 这些是基于意见的问题。 你绝对可以生活在没有&
所有的对象引用,因为您可能没有对象。 两种机制的存在是PHP向后兼容的结果。
在某些情况下,您可以在函数名前添加&,以返回任何值作为参考。
要调用这些函数,我们需要在对象前加上&。
如果我们在对象的前面添加&,它将返回值作为参考,否则它只会返回该变量的一个副本。
class Fruit() {
protected $intOrderNum = 10;
public function &getOrderNum() {
return $this->intOrderNum;
}
}
class Fruitbox() {
public function TestFruit() {
$objFruit = new Fruit();
echo "Check fruit order num : " . $objFruit->getOrderNum(); // 10
$intOrderNumber = $objFruit->getOrderNum();
$intOrderNumber++;
echo "Check fruit order num : " . $objFruit->getOrderNum(); // 10
$intOrderNumber = &$objFruit->getOrderNum();
$intOrderNumber++;
echo "Check fruit order num : " . $objFruit->getOrderNum(); // 11
}
}
链接地址: http://www.djcxy.com/p/1707.html
上一篇: Is there ever a need to use ampersand in front of an object?