如何从内部删除对象?

时间:2012-01-25 17:48:44

标签: php

我有一个对象数组(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);

我已经尝试了几种变体,但我无法弄清楚如何从内部摆脱对象。

任何帮助都将不胜感激。

1 个答案:

答案 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])之类的索引,还有一些其他不同的方法。

相关问题