使用 PHP 将 byref var 分配给另一个 var 是分配引用还是复制值?

With PHP does assigning a byref var to another var assign the reference or copy the value?

以我正在从事的项目中的摘要 class 为例。 (减去所有真正有趣的部分)。

abstract class col_meta extends meta {

    protected $col_obj;

    public function inject_object(&$obj);

    public function &get_object(){
        return $this->col_obj;
    }
}

我知道 inject_object 方法接收 $obj 作为参考,但如果我希望 class 将其分配给受保护的变量,我是否需要再次通过参考分配?

像这样:

class foo extends col_meta {

    public function inject_object(&$obj){
        $this->col_obj = &$obj;
    }

}

或者,只给了一个引用,我是否需要简单地将引用复制到受保护的变量中?

class bar extends col_meta {

    public function inject_object(&$obj){
        $this->col_obj = $obj;
    }

}

我一直绞尽脑汁想解决这个问题,因为他们看起来都是对的。

根据定义,引用是"by reference";这意味着如果函数中的值发生变化,它也会在调用脚本中发生变化。

但是 - 因为它提供了更好的性能 - 如果你传递 "by value",PHP 仍然传递对函数的引用,但如果你更改函数。

请注意,对象总是有效的"pass by reference",因为您的对象变量实际上是指向对象的指针,因此函数内部对对象的任何更改也会反映在函数外部。

除非您明确希望在函数内部更改的变量在函数外部也被更改,否则不要通过引用传递。

如果您想要 "copy" 内部对象的 class,而不是引用;然后使用 clone 创建一个副本。