【问题标题】:Why aren't variables defined inside an include defined in the $GLOBALS array?为什么没有在 $G​​LOBALS 数组中定义的包含中定义变量?
【发布时间】:2011-05-03 17:09:33
【问题描述】:

我正在尝试访问在包含包含后在包含文件中定义的动态命名变量,例如:

要求“/path/to/my/include.php”; 回声 $_VariableDefinedInclude; // 输出变量 echo $GLOBALS["NameOfTheVariableDefinedInInclude"]; // 没有输出?

知道为什么该变量不在 $GLOBALS 数组中吗?有没有像 constant() 这样的函数,但对于标准变量,我可以使用它来通过变量名动态访问变量?

谢谢

【问题讨论】:

  • 我不确定您的包含文件中有哪些代码?你能扩展一下吗?
  • 当你包含一个文件时,它与全局变量没有任何关系。它只是将代码添加为 1 个文件。

标签: php include globals


【解决方案1】:

$GLOBALS 数组仅适用于使用 global 关键字设置的变量。如果您包含另一个文件,它本质上与代码都在同一个文件中相同。换句话说,您仍然可以在同一范围内访问该变量。没有必要使用 $GLOBALS 或任何东西。此外,如果该变量是常量,您可以使用 const (PHP 5.3) 或 define('KEY', $val) 将其定义为常量。

【讨论】:

  • 包含文件中定义的变量是动态命名的。我不知道它的名字,但有另一个变量包含它的名字。我可以将其设为常量或数组键,但这会很不方便。我怎样才能访问这个变量?这行得通吗? ${$variable_name} 还是应该 eval('return '.$variable_name.';');?
  • 使用$$variable_name(或可读性更好的${$variable_name})的代码通常很糟糕。考虑将包含文件中的数据包装在一个返回它的函数中,或者如果您需要一个全局变量,请创建一个包含您的数据的数组,这样您就可以简单地访问您的 $array 而不是 $$fields。
  • 您的声明The $GLOBALS array only applies to variables set with the global keyword 不正确。在全局范围内设置的变量包含在数组中。此外,不使用 global 关键字设置(定义/分配)变量。
  • global 关键字可以访问之前定义的全局变量。它没有设置它们。
【解决方案2】:

鉴于变量是动态命名的,也许:

echo $GLOBALS[$GLOBALS["NameOfTheVariableDefinedInInclude"]];

会成功的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-03
    • 2019-04-17
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    相关资源
    最近更新 更多