2012-01-25 5 views
1

개체 배열 (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);

나는 여러 가지 시도했습니다
은 내가 이것을 사용하려고 해요
배열 A에 다른 개체에 B를 이동하기 위해 노력하고있어 이것에 대한 변형이지만, 나는 내부에서 객체를 제거하는 방법을 이해할 수 없다.

도움을 주시면 감사하겠습니다. 제 생각에는

+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

그것은 일했다! 정말 고맙습니다!! –

관련 문제