2

我在尝试添加到 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 标记这个 questiong 不会损害我解决这个问题的机会,因为我觉得这不仅仅是一个 Yii 特定的问题。

任何见解将不胜感激。

4

3 回答 3

5

如果你这样做,它会工作,我刚刚用 Yii 控制器测试过

global $testVar;
$testVar = '123';
function testOutput() {
   global $testVar;
   var_dump($testVar);
}
testOutput();
于 2013-03-04T20:27:43.727 回答
2

正如 DCoder 所提到的,如果您在类、函数/方法中声明它们,那么它们不是全局的。您可以尝试将它们分配给 $_GLOBALS 数组:

$GLOBALS['testVar'] = 123;

但是,根据遗留代码以及您如何集成它,您可能需要更改该遗留代码中的所有引用以$GLOBALS['thevar']代替使用$thevarextract($GLOBALS)在部分或全部遗留文件的顶部执行操作。

于 2013-03-04T19:55:01.913 回答
0

谷歌搜索:Yii 中的全局变量

于 2013-03-04T19:48:55.370 回答