变量范围
我打电话叫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范围文档似乎没有回答我的问题。
它被认为是这种情况没有包裹在另一个功能。
在将值分配给$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为我的测试文件
好猜!将它添加到我的'* _once'讨厌列表中! – 2011-04-03 16:51:27
这绝对是。我刚刚在你说的那句话后贴出来,说我找到了同样的东西。对不起大家。但希望它可以帮助别人。 – 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。
你不在函数的某个地方吗? “ASSETS”是文件路径吗? – 2011-04-03 16:38:33
ASSETS包含什么? – 2011-04-03 16:38:37
是的,ASSETS是一个文件路径。所以它最终会成为像C:/ apache/htdocs/ – 2011-04-03 16:40:10