以我正在处理的项目中的这个抽象类为例。 (减去所有真正有趣的部分)。
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;
}
}
我一直在试图解决这个问题,因为他们看起来都是正确的。
答案 0 :(得分:1)
根据定义,引用是“通过引用”;这意味着如果在函数中更改了值,则会在调用脚本中更改它。
但是 - 因为它提供了更好的性能 - 如果你传递“by value”,PHP仍会将引用传递给函数,但如果更改函数中的值,则会创建一个副本(按值)。
请注意,对象总是有效地“按引用传递”,因为对象变量实际上是指向对象的指针,因此对函数内部对象的任何更改也将反映在函数外部。
除非您明确希望在函数内部更改的变量也在函数外部更改,否则不要通过引用传递。
如果你想在你的类中复制一个对象,而不是引用;然后使用clone
创建副本。