2012-01-25 11 views
1

私は、オブジェクトの配列(B)を内部に持つオブジェクト(A)の配列を持っています。
私はこれを使用しようとしている配列Aに別のオブジェクトに
をBに移動しようとしている:内部からオブジェクトを削除するには?

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 

これは、オブジェクト指向設計の基本原則の一つです。

編集:つまり、unset($foo)は配列から要素を削除する方法ではありません。この要素にはarray_search()というインデックスを付けることができます。次に、unset($array[$index])のようなインデックスの設定を解除することができます。また、他にもいくつかの方法があります。

+0

それは働いた!どうもありがとうございます!! –

関連する問題