情况:
的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;
?>
Zend 通知:未定义的变量: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包。
答案 0 :(得分:3)
我不是专家,所以如果我错了请不要激怒我,但我认为在调用者的上下文中调用include_once或require_once调用的文件。因为函数foo()不会知道$ x,所以它的任何被调用包都不会。您可以通过使用与上面相同的设置在函数foo()中“声明”$ x来进行实验。
答案 1 :(得分:0)
我得到了很多这些通知,因为我几乎总是使用“$ o。='foo'”而没有任何定义。我只是用error_reporting(E_ALL ^ E_NOTICE)隐藏它们,但我不知道在这种情况下它是否是最佳方式。
答案 2 :(得分: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”。
在函数中,除非声明全局变量,否则无法看到全局变量。
答案 3 :(得分:0)
是它导致你的问题的功能范围
如果你更换
foo("bar.php");
与
include("bar.php");
你会发现一切正常,因为它将它放入当前范围而不是功能范围