变量范围

问题描述:

我打电话叫ajax.php(从我的浏览器进行测试)变量范围

ajax.php require_once delete.php

delete.php require_once no_direct.php

文件

delete.php开始是这样的:

$allowed = array('group'=>'admin'); 
require_once(ASSETS.'/no_direct.php'); //Yes, ASSETS is defined and no_direct is being included. 

在no_direct.php我想:

var_dump($allowed) 

我只是不断的来到NULL。

是否发生这种情况是因为我们在ajax.php的require_once函数中运行,并且$允许的范围回退到GLOBAL范围,不允许我从no_delete.php访问它?

我在看这里:PHP variable defined in 'parent' file not recognized in 'required' file,只是为了勤奋。

我确信我可以用GLOBAL关键字来解决这个问题,但我希望能稍微澄清一下。 PHP范围文档似乎没有回答我的问题。

它被认为是这种情况没有包裹在另一个功能。

+0

你不在函数的某个地方吗? “ASSETS”是文件路径吗? – 2011-04-03 16:38:33

+0

ASSETS包含什么? – 2011-04-03 16:38:37

+0

是的,ASSETS是一个文件路径。所以它最终会成为像C:/ apache/htdocs/ – 2011-04-03 16:40:10

在将值分配给$allowed之前,您是否有任何可能已调用require_once(ASSETS.'/no_direct.php');

require_once(ASSETS.'/no_direct.php'); 
... 

$allowed = array('group'=>'admin'); 
require_once(ASSETS.'/no_direct.php'); 

在这种情况下,脚本no_direct.php不应该输出$allowed

输出将是:

Notice: Undefined variable: allowed in D:\wampserver\www\gim\no_direct.php on line 2 
NULL 

P.S.还有我在localhost路径WAMP为我的测试文件

+2

好猜!将它添加到我的'* _once'讨厌列表中! – 2011-04-03 16:51:27

+0

这绝对是。我刚刚在你说的那句话后贴出来,说我找到了同样的东西。对不起大家。但希望它可以帮助别人。 – 2011-04-03 16:52:35

会出现这种情况,因为我们ajax.php的require_once函数内部运行和$允许的范围推回全球范围内不允许我从no_delete.php访问它?

绝对不是。

关于包含没有范围问题。
唯一的范围依赖问题是用户定义的函数。所以,如果没有涉及的功能,唯一的原因可能是一些错误/错误类型 - 你正在编辑/包括错误的文件,或包括通过http或其他类型的HTML代码。只需仔细检查。

所以我的ajax.php文件还require_once build.php和config.php文件

我build.php文件require_once no_direct.php为好。

正如函数所示,它只需要no_direct.php一次!

所以我看到的NULL是来自build.php的include,而不是delete.php的include no_delete。