【问题标题】:Accessing variables from one include inside another从一个包含另一个访问变量
【发布时间】:2015-08-20 02:36:39
【问题描述】:

我有一个名为 index.php 的 PHP 文件,在里面我说:

include_once "settings.php";
include_once "autoload.php";

settings.php 文件说:

$srcDir = "/home/blah.php";

那么 autoload.php 有这样一个函数:

function __autoload($class)
{
    echo "srcdir is: $srcDir";
}

但是我得到一个错误,$srcDir 没有定义

也许有更好的 OOP 方式来做这一切,但我只是使用 settings.php 来设置文件路径,我希望它便于公司的平面设计师编辑,只是简单的文件

【问题讨论】:

  • 你的意思是$srcDir = "/home/blah.php";(错过了$)?只要变量是在当前范围内定义的,它们就可以被连续包含的脚本看到,这些脚本在范围内访问它们。
  • 哦,这只是我在这里打错了,$ 在那里。是的,我很困惑为什么它不起作用。
  • 如何从自动加载功能中尝试 file_get_contents('settings.php');如果它不起作用,则不包含该文件。试试看
  • 或者你可以做 print_r(get_included_files());查看是否正在加载设置文件
  • 多么奇怪 - 当我打印 file_get_contents 行时,什么都没有出现,但是 print_r 获取包含的文件的东西确实显示了包含的 settings.php 文件。我什至把那个 print_r 东西放在函数里面,它显示了包含的文件,但我仍然得到错误。 settings.php 文件本身是正确的,它设置了变量,如果我在其中添加一个 echo 来显示变量,它就可以工作。多么奇怪

标签: php scope include


【解决方案1】:

将变量放入函数的作用域。

function __autoload($class)
{
    global $srcDir;
    echo "srcdir is: $srcDir";
}

【讨论】:

  • 这是不必要的,一旦你包含一个 php 文件,它就像代码被附加到它被包含的地方一样。
  • @Euphoria php.net/manual/en/language.variables.scope.php,第二个例子,“函数内使用的任何变量默认限制在本地函数范围内”。
  • 这确实使它工作。我将不得不更多地阅读它,因为我不完全理解,但它有效。
猜你喜欢
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多