2009-06-15 4 views
0

상황 뿌려 bar.php :PHP/젠드 정의 변수

<?php 
    echo $x; 
?> 

젠드 통지 : 정의되지 않은 변수 : 전역의 $ X를 배치 X

; bar.php에서 통지를 제거하지만, 왜 처음에 이것에 대한 통지가 있다는 것을 이해합니다. C 헤더를 포함하는 것과 같은 많은 작업을 포함하지 않습니까? 이는 해석 된 코드가 다음과 같음을 의미합니다.

<?php 
    function foo($p) { 
     include_once($p); // please dont mind the inclusion hole 
    } 
    $x = 42; 

    // this however, is included by a function... 
    // does the function's scope influence the stuff it includes? 
    echo $x; // undefined variable 
?> 

내 편집기는 Eclipse/Zend 패키지입니다.

답변

3

필자는 전문가가 아니므로, 내가 틀렸다면 나에게 불꽃을 내지 말아주세요.하지만 include_once 또는 require_once라는 파일이 호출자의 컨텍스트에서 호출된다고 생각합니다. foo() 함수는 $ x에 대해 알 수 없기 때문에 호출 된 함수도 포함하지 않습니다. 위와 같은 설정으로 foo() 함수 내에서 $ x를 '선언'하여 실험 할 수 있습니다.

+0

나는 당신이 옳다고 믿게됩니다. 글로벌 $ x; foo() 함수 안에서도 notices 오류가 수정됩니다. 나는 이것에 관한 문서 페이지를보고 싶어 할 것이고, PHP가 여전히 코드를 잘 실행하지만 통지를내는 이유는 무엇일까? –

+1

오류가 발생하지 않는 이유는 간단합니다. PHP에서 선언되지 않은 변수를 사용하는 것은 오류가 아닙니다.항상 경고를 생성하고 실행을 계속합니다. 그래서 항상 내 오류 처리기를 선언하고 모든 오류/경고/통지에 예외를 던지는 것을 선호합니다. 좋은 코드는 어쨌든 어떤 것도 생성해서는 안됩니다. – soulmerge

0

나는 거의 모든 것이 정의없이 "$ o. = 'foo'"로 간다. 나는 error_reporting (E_ALL^​​E_NOTICE)과 함께 그것들을 숨기고 있지만,이 경우에 이것이 최적의 방법인지는 모른다.

+0

아마도 E_ALL | E_NOTICE, 캐럿 문자는 단항 연산자입니다. – soulmerge

0

변수와 함수가 같은 파일에 있어도 작동하지 않습니다.

1 <?php 
    2 
    3 $x = 3; 
    4 
    5 function t() 
    6 { 
    7 echo $x; 
    8 } 
    9 
10 t(); 

아무 것도 인쇄하지 않습니다.

그러나 글로벌

1 <?php 
    2 
    3 $x = 3; 
    4 
    5 function t() 
    6 { 
    7 global $x; 
    8 echo $x; 
    9 } 
10 
11 t(); 

을 추가하고 "3"을 볼 수 있습니다.

함수에서 선언하지 않으면 전역 변수를 볼 수 없습니다.

0

예는 당신의 문제의 원인이되는 기능 범위는

당신은이에 넣는다 때문에 모든 것이 잘 작동 것을 볼 수 있습니다

foo("bar.php"); 

include("bar.php"); 

로 교체하는 경우 현재 범위가 아닌 기능 범위

관련 문제