2012-08-29 4 views
2

언어는 Apache 2.2 서버에서 PHP 5.4입니다. 그것은 아약스에 의해 호출되는 스크립트입니다.변수가 범위를 벗어나는 이유는 무엇입니까? PHP

$usr = new User(); 

function getMyName(){ 
    echo $usr->username; 
} 
getMyName(); 

어떤 이유로 $ name이 (가) 범위를 벗어납니다. 그게 왜 그랬을까요? 나는 또한 똑같은 결과로 스크립트를 직접 호출하려고 시도했다. 해결을 위해 ($ name) 사용을 시도했지만 익명 함수 (클로저)에서만 작동합니다. 나는이 작업을 수행 할 때

, 그것은 작동하지만 그것은 말도 안 : 또는

$usr = new User(); 
$name = $usr->username; 

function getMyName($n){ 
    echo $n; 
} 
getMyName($name); 
+1

첫 번째 예에서는 $ name이 표시되지 않습니까? 또한 매개 변수를 통해 전달하지 않으면 함수가 $ usr에 액세스하는 방법은 무엇입니까? –

+0

첫 번째 예제에는 $ 이름이 없지만 그 방법도 시도했습니다. 필자가 사용 해본 다른 모든 언어는 C++, Pascal, VB (S), Java ... 등의 언어를 사용할 수 있습니다. – user1632874

답변

4
$usr = new User(); 

function getMyName(){ 
    global $usr; 
    echo $usr->username; 
} 
getMyName(); 

:

$usr = new User(); 

function getMyName($usr){ 
    echo $usr->username; 
} 
getMyName($usr); 
+0

감사! 나는 C++로 익숙해졌고, 변수가 없으면 놀라움을 금치 못했습니다 :) 전역 변수를 사용할 때 문제가 있습니까? 네가 할 필요가 없다면 뭔가를 사용하는 것에 대해 뭔가 잘못되었다는 말을 들었다. – user1632874

+0

나는 이것을 aswer로 넣기 시작했다. 그러나 @Merca는 그의 것을 올려 놓았다. 그리고 나의 것을 추가한다. 첫 번째 예제에서, 나는 '$ name'에 대한 참조를 볼 수 없다. $ usr 객체는 함수의 범위를 벗어나서 범위를 벗어 났지만 Merca처럼 인수로 전달할 수 있습니다. – TecBrat

1

그것은 말도 아니다. 변수 범위가 작동하는 방식입니다. $ usr 변수를 함수 매개 변수로 전달해야합니다. 그렇지 않으면 범위를 벗어납니다. 함수는 입력을 받아 들여 결과/결과를 돌려 보내도록 설계되었습니다.

컴퓨터 과학, 서브 루틴, 또한 불리는 프로 시저, 함수에서

, : 당신은 여기

$usr = new User(); 
$name = $usr->username; 

function getMyName($n){ 
    echo $n; 
} 
getMyName($name); 

는 위키 백과에서 인용의 ... 대신 전역으로 장난으로, 두 번째 예에 충실해야 루틴, 메소드 또는 서브 프로그램은 특정 태스크를 수행하는 대형 컴퓨터 프로그램 내의 소스 코드의 일부이며 나머지 코드와는 비교적 독립적 인 입니다.

+1

전역 변수가 정확히 무엇입니까? 왜 다른 모든 언어 변수들은 그들이 실행하는 컨테이너에 의해 범위 제한을 받는가? - 함수 밖의 변수는 사용할 수 있어야하지만 내부 변수는 외부에서 사용할 수 없어야한다. 아직까지 코드에 익숙하지 않은 것 같습니다. PHP를 스크랩하고 다시 작성할 수 있습니다. C++/ISAPI - PHP보다 뛰어난 성능을 보였습니다. – user1632874

+1

기본적으로 전역 변수는 코드의 한 부분에서 다른 부분으로 변수 데이터를 전송하므로 많은 버그가 발생할 수 있습니다. 또한 응용 프로그램을 디버그하기가 더 어려워 질 수 있습니다. 다음은 좋은 기사입니다 : http://tomnomnom.com/posts/why-global-state-is-the-devil-and-how-to-avoid-using-it –

+0

경합 조건 – ianace

관련 문제