我有一个对象数组(A),里面有一个对象数组(B)
我正在尝试将B移动到数组A中的另一个对象。
我正试着用这个:
public function killToken($a) {
array_push($a->tokens,$this); // Put this token in new array (works)
unset($this); // Remove token from this array (does not work)
}
我通过以下方式调用此函数:$b->killToken($a);
我已经尝试了几种变体,但我无法弄清楚如何从内部摆脱对象。
任何帮助都将不胜感激。
答案 0 :(得分:2)
在我看来,你试图这样做是打破封装:
array_push($a->tokens,$this);
您不应该在$a
内修改$b
的状态。您只应在$b
内修改$b
的状态,并告诉$a
修改自己的状态:
$b->killToken($a); // only removes $a from $b->tokens
$a->addToken($b); // adds $b to $a->tokens
这是面向对象设计的基本原则之一。
编辑:话虽如此,unset($foo)
并不是您从数组中删除元素的方式。您可以array_search()获取元素,它将为您提供索引,然后您可以取消设置unset($array[$index])
之类的索引,还有一些其他不同的方法。