使用 PHP 将 byref var 分配给另一个 var 会分配引用或复制值


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

以我正在处理的一个项目中的这个抽象类为例。(减去所有真正有趣的部分)。

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 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 引用是"通过引用";这意味着如果在函数中更改了值,则在调用脚本中也会更改该值。

但是 - 因为它提供了更好的性能 - 如果你传递"按值",PHP 仍然传递对函数的引用,但如果你更改函数中的值,则会创建一个副本(按值)。

请注意,对象

始终有效地"通过引用传递",因为对象变量实际上是指向对象的指针,因此对函数内部对象的任何更改也将反映在函数外部。

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

如果你想要类中对象的"副本",而不是引用;那么使用 clone 创建一个副本。