php函数全局定义的变量不适用于Yii

时间:2013-03-04 19:40:05

标签: php yii

我正在尝试添加到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特定的问题。

任何见解都将不胜感激。

3 个答案:

答案 0 :(得分:5)

如果你喜欢这样,它会起作用,我只是用Yii控制器测试

global $testVar;
$testVar = '123';
function testOutput() {
   global $testVar;
   var_dump($testVar);
}
testOutput();

答案 1 :(得分:2)

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

$GLOBALS['testVar'] = 123;

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

答案 2 :(得分:0)

谷歌搜索:Global Variables in Yii