有没有必要在对象前面使用&符号?

因为对象现在默认通过引用传递,那么当&$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?

下一篇: When should I use a bitwise operator?