문제

그 상황:

index.php :

<?php
    include("foo.php");
    include("baz.php");
        foo("bar.php");
?>

baz.php :

<?php
    $x = 42;
?>

foo.php :

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

bar.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 패키지입니다.

도움이 되었습니까?

해결책

나는 전문가가 아니므로 내가 틀렸다면 나를 화나게하지 마십시오. 그러나 include_once 또는 require_once가 호출하는 파일은 발신자의 맥락에서 호출된다고 생각합니다. function foo ()는 $ x에 대해 알지 못하기 때문에 호출 된 사람도 포함하지 않습니다. 위와 동일한 설정으로 '$ x'내부 함수 foo ()를 '선언하여 실험 할 수 있습니다.

다른 팁

나는 거의 모든 길이 정의없이 "$ o. = 'foo'"와 함께 간다 때문에 그 통지를 많이 얻습니다. 나는 그것들을 error_reporting (e_all ^ e_notice)으로 숨기고 있지만이 경우 최적의 방법인지는 모르겠습니다.

변수와 함수가 동일한 파일에 있더라도 작동하지 않습니다.

  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"을 볼 수 있습니다.

함수에서는 선언하지 않으면 글로벌 변수를 볼 수 없습니다.

예, 문제를 일으키는 기능 범위

교체하는 경우

foo("bar.php");

~와 함께

include("bar.php");

기능 범위가 아닌 현재 범위에 넣기 때문에 모든 것이 잘 작동한다는 것을 알 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top