【发布时间】:2025-12-17 10:25:01
【问题描述】:
我在 php 中遇到了全局变量的问题。我在一个文件中设置了一个$screen var,它需要另一个文件调用另一个文件中定义的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 全局,则 $screen 会为 initSession() 方法正确更新。奇怪。
【问题讨论】:
-
global $a;等价于$a =& $GLOBALS['a'];。也就是说,它在本地范围内创建一个同名的引用。在函数之外,您始终处于全局范围内。 PHP 不提供“文件范围”。