【问题标题】:Variable scope in a required file所需文件中的变量范围
【发布时间】:2011-07-28 16:54:14
【问题描述】:

我正在调用一个名为 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 函数中运行,并且 $allowed 的范围推回到 GLOBAL 范围,不允许我从 no_delete.php 访问它吗?

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

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

它并没有像想象的那样包装在另一个函数中。

【问题讨论】:

  • 你不在某个函数内部? ASSETS 是文件路径吗?
  • 是的,资产是一个文件路径。所以它最终会像 C:/apache/htdocs/
  • no_direct.php 中还有其他代码吗?
  • 你为什么不检查实际资产价值?
  • @Senica 你也不在一个包装 ajax.php 主体的函数中吗?只需检查以确保 100% 确定,因为这是最常见的原因。

标签: php scope


【解决方案1】:

在为$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 

附注我的测试文件在 wamp 中的本地主机上的路径

【讨论】:

  • 绝对是这样。我刚刚在你这么说之后发布了,说我找到了同样的东西。对不起大家。希望它可以帮助其他人。
【解决方案2】:

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

绝对不是。

没有关于包含的范围问题。
唯一与范围相关的问题是用户定义的函数

因此,如果不涉及任何功能,唯一的原因可能是一些错误/错误类型 - 您正在编辑/包含错误的文件,或者通过 http 或类似的方式包含 HTML 代码。请仔细检查。

【讨论】:

    【解决方案3】:

    所以我的 ajax.php 文件也需要 build.php 和 config.php

    我的 build.php 文件也需要 no_direct.php。

    正如函数所暗示的,它只需要 no_direct.php ONCE!

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2022-10-07
      • 1970-01-01
      相关资源
      最近更新 更多