我正在尝试添加到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特定的问题。
任何见解都将不胜感激。
答案 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)