2012-08-06 4 views
3

나는이 할 때 정확히 무슨 일 궁금 :PHP와 기능 범위

$my_variable = 'foo'; 
function whatever(){ 
    $my_variable = 'bar'; 
    global $my_variable; 
} 

나는 기능 $my_variable의 범위 내에서 이제 'foo는'하다는 것을 알고있다.

내부적으로 어떤 일이 벌어지고 있습니까? 내 함수 내에서 $my_variable = 'bar';을 수행 할 때 로컬 변수를 만들었습니다. 내가 다음 번에 정확히 무엇이 발생하는지 global $my_variable;? 로컬 하나가 자동으로 삭제됩니까?

답변

2

global이 처리 될 때까지 함수는 로컬 bar 복사본을 사용합니다. 글로벌 선언이되면 로컬 버전이 숨겨 지거나 파괴 될 수 있습니다. 확실하지는 않으며 전역 버전 만 사용할 수 있습니다. 예컨대 :

$z = 'foo'; 
function whatever() { 
    echo $z; // warning: undefined variable 
    $z = 'bar'; 
    echo $z; // bar 
    global $z; 
    echo $z; // foo 
} 
whatever(); 
+1

, 로컬 버전은 바로 거기 파괴. 필자는 함수 내에서'unset()'의 액션과 unset docs (http://php.net/manual/en/function.unset.php)에있는이 문장을 추론합니다 : * 전역 변수가 unset() 함수 내에서 지역 변수 만 파괴됩니다. 호출 환경의 변수는 unset()이 호출되기 전과 동일한 값을 유지합니다. * – Fluffeh

2

예, 로컬 하나가 자동으로 삭제됩니다 또는 아마 더 나은이 전역 변수로 대체, 말로. 이 같은 그것의

0

생각해은 :

은`global`를 호출 할 때 내가 믿는
$GLOBALS['my_variable'] = 'foo'; 
function whatever(){ 
    $my_variable = 'bar'; 
    $my_variable = $GLOBALS['my_variable']; 
}