Php 是否需要在物体前使用符号?

Php 是否需要在物体前使用符号?,php,oop,object,reference,php-internals,Php,Oop,Object,Reference,Php Internals,由于现在默认情况下对象是通过引用传递的,所以当&$obj有意义时,是否存在一些特殊情况?对象使用不同的引用机制&$object更像是一个引用的引用。你真的无法将两者进行比较。 见: PHP引用是一个别名,它允许两个不同的变量写入相同的值。从PHP5开始,对象变量不再包含对象本身作为值。它只包含一个允许对象访问器查找实际对象的对象标识符。当一个对象通过参数发送、返回或分配给另一个变量时,不同的变量不是别名:它们持有指向同一对象的标识符副本 &$object不是$object。我给你举个例子: fo

由于现在默认情况下对象是通过引用传递的,所以当
&$obj
有意义时,是否存在一些特殊情况?

对象使用不同的引用机制
&$object
更像是一个引用的引用。你真的无法将两者进行比较。 见:

PHP引用是一个别名,它允许两个不同的变量写入相同的值。从PHP5开始,对象变量不再包含对象本身作为值。它只包含一个允许对象访问器查找实际对象的对象标识符。当一个对象通过参数发送、返回或分配给另一个变量时,不同的变量不是别名:它们持有指向同一对象的标识符副本

&$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
   }    
}

在古老的php版本上运行-廉价/愚蠢的主机提供的类型,快乐地运行着神奇的引号和注册全局打开。。。应该从动态观察中取消的安装类型。如果我想通过循环来修改数组中的项。对于($objects as$key=>$value){$objects[$key]=new Object();},第二个示例是否比执行
更合适?代码应该指出&是一种不同的引用机制。在PHP4中,对象不是引用,因此必须使用
$obj=&new MyClass
创建对象。如果你想修改函数中的一个对象,你必须通过引用来传递它。感谢历史背景。然而,我想,有人会问这个问题,为什么PHP-7仍然有两种不同的引用机制。