【发布时间】:2013-02-19 00:34:01
【问题描述】:
我在尝试将一些遗留代码添加到 Yii 项目时遇到问题。
它与全局变量有关,我很清楚应该将其作为参数传递,但由于这段旧代码用于其他项目,重写它并不是真正的选项。
$testVar = '123';
function testOutput() {
global $testVar;
var_dump($testVar);
}
testOutput();
现在,如果我将此文件包含在一个普通的 php 文件中,它可以工作并输出
string '123' (length=3)
但是如果我将此文件包含在 Yii 控制器甚至模板中,它会输出此文件
null
我试图搜索这个问题,但我得到了一堆关于人们错误地使用全局变量的结果。我确信这实际上不是 Yii 问题,但很可能是 Yii 设置的 php_ini 设置,但是在搜索代码或 Yii 文档时我找不到任何可以解释这一点的内容。
可以通过使用我的第一个代码块创建一个文件然后将其包含到 Yii 模板或控制器中来测试这个示例。我什至用一个干净的示例 Yii 项目对其进行了测试。
我希望通过使用 Yii 标记这个问题不会损害我解决这个问题的机会,因为我觉得这不仅仅是一个 Yii 特定的问题。
任何见解将不胜感激。
【问题讨论】:
-
如果你在函数/类中声明
$testVar = 123,它不是全局的。 -
如果你在函数定义之前在开头做
global $testVar; $testVar = 123;,它会起作用,我只是用Yii控制器测试过 -
@MarkoD 你是对的,但这是为什么呢?有任何文档说明为什么需要这样做以及为什么 Yii 框架会导致需要这样做吗?您也将此作为答案,我会接受。
-
我将其发布为答案。我不知道为什么会这样,我想这和其他人所说的差不多……
-
@byoungb:这是因为最初声明$testVar的作用域不是全局作用域,所以其他作用域将无法访问它。