2014-11-12 1 views
6

실행 다음 코드를 넣어PHP 변수 참조 퍼즐

<?php 
$a = array('yes'); 
$a[] = $a; 
var_dump($a); 

:

array(2) { 
    [0]=> 
    string(3) "yes" 
    [1]=> 
    array(1) { 
    [0]=> 
    string(3) "yes" 
    } 
} 

실행 다음 코드를 넣어

<?php 
$a = array('no'); 
$b = &$a; 
$a[] = $b; 
$a = array('yes'); 
$a[] = $a; 
var_dump($a); 

:

array(2) { 
    [0]=> 
    string(3) "yes" 
    [1]=> 
    array(2) { 
    [0]=> 
    string(3) "yes" 
    [1]=> 
    *RECURSION* 
    } 
} 

$ a의 값을 다시 할당했습니다. 순환 순환 참조가있는 이유는 무엇입니까?

+1

와우, 유래에 대한 흥미로운! :). +1 !!! –

답변

3

참조를 제거하려면 unset으로 전화해야합니다. 없이 $a = array('yes');$a은 여전히 ​​$b으로 제한되며 여전히 참조됩니다. 따라서 두 번째 부분은 첫 번째 부분과 동일한 동작을합니다.

그러나 내부 배열의 참조는 잠재적으로 위험합니다. 오른쪽에 참조를 사용하여 정상적인 (참조가 아닌) 할당을 수행하면 왼쪽이 참조로 바뀌지 않지만 배열 내부의 참조는이 일반 지정으로 보존됩니다.

http://php.net/manual/en/language.references.whatdo.php