2014-07-22 3 views
-3

$debug 변수를 사용하여 테스트중인 함수에서 인쇄 명령문을 제어하고 있습니다. $debug이 함수와 동일한 범위 수준에서 true으로 선언되고 초기화 되더라도 함수 내에서 false (또는 undefined)으로 처리됩니다. PHP의 가변 범위에 대한 나의 이해가 잘못 되었습니까? 이 문제를 어떻게 해결할 수 있습니까?범위에 있어야하는 변수가 없습니다.

실제 코드는 훨씬 복잡하지만 다음은 같은 문제를 나타내는 최소한의 예입니다. 그게 무슨 가치가 있는지, 나는 맥 오에스텐 10.9.4에서 PHP 5.4.24를 사용하여 커맨드 라인에서 이것을 실행하고있다.

<?php 

$debug = true; 

function myFunction() 
{ 

    if($debug) { 
     echo "I'm debugging"; 
    } else { 
     echo "I'm not debugging"; 
    } 
} 

myFunction(); 

?> 

나를 위해이 기능은 "나는 디버깅하지 못했습니다."라고 표시합니다.

+2

이 여기에 기본 * 범위 *입니다 사용할 수 있습니다. '$ debug'는 범위 안에 * 없습니다 *. 왜 그렇게 생각하니? –

+0

@JohnConde 함수 자체와 동일한 수준입니다. 어떻게 그 범위에 있지 않습니까? –

+2

이것은 JavaScript가 아닙니다. 함수 외부에서 선언 된 변수는 범위를 벗어납니다. [Documentation] (http://php.net/manual/en/language.variables.scope.php). –

답변

1

는 다음 코드를 사용하십시오 :

<?php 

    $debug = true; 

    function myFunction($debug) 
    { 

     if($debug) { 
      echo "I'm debugging"; 
     } else { 
      echo "I'm not debugging"; 
     } 
    } 

    myFunction($debug); 

    ?> 

기능은 작동하도록 매개 변수 "$ 디버그"를 필요로한다. PHP에 오신 것을 환영합니다! :)

+0

실제 함수 인 myFunction에는 더 많은 매개 변수가 있으며 '$ debug'를 목록에 추가하고 싶습니다. 글로벌 솔루션은이 경우에 필요한 솔루션입니다. 생각해 줘서 고마워. –

+0

다음에 getter/setter를 작성하십시오.이 문제는 알고 있고 그것을 해결하는 가장 간단한 방법입니다. – Tyralcori

+0

전역을 사용하여 끝났지 만 매개 변수로 전달하는 솔루션이 가장 좋습니다. 하나 (모범 사례 - 현명한), 그래서 나는 당신의 대답을 받아 들였다. –

0

$ debug = true; 범위를 벗어나는 대신이 시도 :

<?php 



function myFunction() 
{ 

    $debug = true; 

    if($debug) { 
     echo "I'm debugging"; 
    } else { 
     echo "I'm not debugging"; 
    } 
} 

myFunction(); 

?> 

또한 global

+0

적어도 그의 경우에는 이미 전역 범위가 있습니다. – Tyralcori

+0

@Tyralcori 그는 자신의 예에서 글로벌을 사용하지 않고 있으며, 당신이 무슨 말을하고 있는지 잘 모르겠습니다. 그가하고 싶은 일에 달려 있습니다. 함수 인자에 변수를 전달할 수도 있습니다. – user3849925

관련 문제