배열을 사용하여 트리를 통해 경로를 저장하는 스택으로 사용하고 있습니다. 각 요소는 트리의 노드를 가리키고 마지막 요소를 끈 다음 해당 요소가 참조하는 객체를 null로 설정하려고합니다. PHP는 C 틱 언어 수행으로 '*'연산자를 가지고 있다고 가정PHP에서 참조를 역 참조 할 수 있습니까?
$node = array_pop($path);
*$node = null;
:
기본적으로. 지금은 내가했다 아이 부모 노드와 기억하기에서 시작하여 다음과 같이 null로 그 설정의 추악한 솔루션이 있습니다
if($goLeft) {
$parent->left = null;
} else {
$parent->right = null;
}
을 나는 경로를 포함하는 어레이가에 의해 생성되기 때문에이 추한 말 내 트리 클래스의 공용 함수. 나는 PHP의 특이성 (feature?)을 다루는 구현 세부 사항을 노출시키지 않고 트리를 통과하는 경로의 노드에서 직접 작업하는 기능을 폭로하고 싶습니다. ATM 반환 값 (이 경우 $ goLeft)에 부울을 포함 시켜서 참조를 역 참조 할 수없는 문제를 해결할 수 있습니다.
이 문제가 두 번째 발생 했으므로 누구나 코드 블록의 첫 번째 블록과 비슷한 기능을 수행 할 수있는 방법을 알고 있다면 공유하십시오.
(EDIT) & 's 및 배열의 많은 순열 실험 후
, 그것은 기본적인 문제는 내가지고 있다고 오류의 원인을 잘못 해석했다는 것을 밝혀졌습니다.
나는$a = ($x > $y) ? &$foo[$bar] : $blah;
을 시도하고 "구문 오류, 예기치 않은 '&'"있어요. 나는이 문제가
$foo[$bar]
에 & - 운영자를 사용하고 있음을 의미한다고 해석했습니다. 그 범인은 정확히
if($x > $y) {
$a = &$foo[$bar];
} else {
$a = null;
}
과 같이 완벽하게 작동합니다. 그래서 나는 존재하지 않았던 문제에 대한 해결 방법을 찾고있는 야생 거위 쫓아 갔다. 내가 &의 체인을 깨지 않는 한, PHP는 내가 원하는 것을 수행한다. 이것은 변수 (변수 자체가 아님)가 참조하는 객체를 조작하는 것이다. 나를 엉망이 무엇 예
$a1 = new SomeClass;
$a2 = &$a1;
$a3 = &$a2;
$a4 = &$a3;
$a4 = 42; // This actually sets $a1 to 42
var_dump($a1); // Emits 42
내가 (이것은 잘못된 것입니다) 객체 어쨌든 참조로 주변에 전달되는 생각, 그래서 표현이 개체에 해결하면 나는 &이 필요하다고 생각하지 않았다이다. 내 말은 :
class A {
public $b;
}
class B {}
$a = new A;
$a->b = new B;
$c1 = $a->b;
$c2 = &$a->b;
$c1 = 42; // Merely assigns 42 to $c1
$c2 = 42; // Assigns 42 to $a->b
이 정확한 문제는 http://www.php.net/manual/en/language.oop5.references.php에 있습니다. 내가 그것을 읽었을 때 처음으로 침몰했으면 좋겠어!
잘 모르겠어, 네가 원하지만'$ parent-> left = null; 대신에'unset ($ parent-> left); '를 쓸 수있다. – Leri
@PLB : 언 세트 (unset) '가 아니라'연결 해제 (unlink) '. –
@Rocket 물론 그렇습니다. 나는 매우 피곤하다. – Leri