问一个相互引用(或相互包含)的问题,为啥不起作用?
代码如下
class P{
public $expr, $operand;
function expr(){
if(!isset($this->expr)){
$this->expr = ['expr'];
$this->expr[] = $this->operand();
}
return $this->expr;
}
function operand(){
if(!isset($this->operand)){
$this->operand = ['operand'];
$this->operand[] = $this->expr();
}
return $this->operand;
}
}
$o = new P;
print_r($o->expr());
$o->operand[] = 'operand2';
print_r($o->expr);
对象 o 的属性 expr 是一个数组,此数组含有一个元素 $o->operand
;对象 o 的另一个属性 operand 也是一个数组,该数组反过来又包含元素 $o->expr
。如此一来,对象 o 的两个属性形成“相互包含”或“相互引用”。
问题来了,给$o->operand
添加一个元素 operand2 之后$o->expr
上却看不到变化。可见这样写的相互引用是失败的,那正确的写法又是怎样的呢?
推荐文章: