2012-01-25 41 views
1

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

'$ this'在数组中没有上下文。我不认为你很清楚地解释你的问题。如果可以,请尝试提供一个数据结构的例子。 – FtDRbwLXw6

+0

啊..好吧。所以'$ b'是一个具有属性的对象,该属性是其他对象的数组?而'$ a'是你想从该数组属性中移除的对象? – FtDRbwLXw6

回答

2

在我看来,你试图这样做破坏了封装:

array_push($a->tokens,$this); 

你不应该从$b内修改$a的状态。您应该只从$b内修改$b的状态,并告诉$a修改自己的状态:

$b->killToken($a); // only removes $a from $b->tokens 
$a->addToken($b); // adds $b to $a->tokens 

这是OO设计的基本原则之一。

编辑:这就是说,unset($foo)是不是如何从数组中删除元素。你可以使用array_search()作为元素,它会给你索引,然后你可以取消像unset($array[$index])这样的索引,还有其他一些不同的方法。

+0

它的工作!非常感谢!! –