我在PHP中遇到了全局变量的问题。我有一个$screen
变量在一个文件中被设置,在另一个调用了一个在另一个文件中定义的initSession()
的文件中要求使用它。 initSession()
声明了global $screen
,然后进一步处理$screen,使用在第一个脚本中设置的值。
这是如何可能的?
更令人困惑的是,如果您尝试再次设置$screen并调用initSession()
,它会再次使用首次使用的值。以下代码将描述此过程。有人能否解释一下这个问题?
$screen = "list1.inc"; // From model.php
require "controller.php"; // From model.php
initSession(); // From controller.php
global $screen; // From Include.Session.inc
echo $screen; // prints "list1.inc" // From anywhere
$screen = "delete1.inc"; // From model2.php
require "controller2.php"
initSession();
global $screen;
echo $screen; // prints "list1.inc"
更新:
如果在调用第二个模块之前再次将$screen
声明为全局变量,则initSession()
方法中的$screen
会得到正确更新。奇怪。
global $a;
的等价写法是$a =& $GLOBALS['a'];
,意思是在本地作用域内创建一个与全局变量同名的引用。在函数外部时,总是处于全局作用域中。PHP 不支持“文件作用域”。 - Matthew