PHP / Zend는 정의되지 않은 변수에 대해 불평합니다
-
13-09-2019 - |
문제
그 상황:
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");
기능 범위가 아닌 현재 범위에 넣기 때문에 모든 것이 잘 작동한다는 것을 알 수 있습니다.