Php Zend Framework是否关闭将变量声明为全局变量?
我正在将第三方代码集成到我在Zend框架中编写的web应用程序中 我要集成的代码将变量声明为全局变量。它自己工作,但当我将它包含在Zend框架中时就不行了。起初,我怀疑Zend框架中存在禁用全局变量声明的情况。我在控制器中有以下测试代码:Php Zend Framework是否关闭将变量声明为全局变量?,php,zend-framework,global-variables,Php,Zend Framework,Global Variables,我正在将第三方代码集成到我在Zend框架中编写的web应用程序中 我要集成的代码将变量声明为全局变量。它自己工作,但当我将它包含在Zend框架中时就不行了。起初,我怀疑Zend框架中存在禁用全局变量声明的情况。我在控制器中有以下测试代码: public function testglobalAction() { $a = 1; function b() { global $a; echo $a*2; } b(); } 当我运行时,它打印出
public function testglobalAction()
{
$a = 1;
function b()
{
global $a;
echo $a*2;
}
b();
}
当我运行时,它打印出0,而不是2。最重要的是,在同一个web服务器上运行相同的代码会打印出2
我知道我可以替换所有全局实例来使用Zend Registry。然而,grep告诉我大约有700行我必须更改,所以目前不可行
有人知道我该如何解决这个问题吗?没有。Zend Framework不禁用globals,因为这是不可能的。$GLOBALS数组由php.ini
register\u GLOBALS
指令控制。不能在运行时使用ini\u set
更改它
有关参考信息,请参阅
注意:检查.htaccess文件中每个目录的
php\u值是否有任何覆盖。否。Zend Framework不禁用globals,因为这是不可能的。$GLOBALS数组由php.iniregister\u GLOBALS
指令控制。不能在运行时使用ini\u set
更改它
有关参考信息,请参阅
注意:检查.htaccess文件中每个目录的php\u值是否有覆盖。原始$a变量不是全局变量
方法内部声明的任何变量都是该方法的局部变量,除非它以前在当前范围内声明为全局变量
试试这个
public function testglobalAction()
{
global $a;
$a = 1;
function b()
{
global $a;
echo $a*2;
}
b();
}
原始$a变量不是全局变量
方法内部声明的任何变量都是该方法的局部变量,除非它以前在当前范围内声明为全局变量
试试这个
public function testglobalAction()
{
global $a;
$a = 1;
function b()
{
global $a;
echo $a*2;
}
b();
}
全局变量在PHP中不是一个好主意。Zend帮了你一个忙。我知道这将是我对这个问题的第一个评论/回答!:)但是我真的将这些代码集成到了我的应用程序中。请在从控制器运行时提供这些代码。我在你的样品中没有看到任何与采埃孚有关的东西。Oversimplify=我们无法帮助您。使用控制器操作编辑了问题。这是一个非常简单的代码,因为我只是想测试我的理论是否正确。Zend帮了你一个忙。我知道这将是我对这个问题的第一个评论/回答!:)但是我真的将这些代码集成到了我的应用程序中。请在从控制器运行时提供这些代码。我在你的样品中没有看到任何与采埃孚有关的东西。Oversimplify=我们无法帮助您。使用控制器操作编辑了问题。这是一个非常简单的代码,因为我只是想测试我的理论是否正确。我试过打开register_globals,得到了相同的结果。也没有php_值覆盖该指令。有趣的是,我在同一个web服务器中有一个测试文件,它打印出了预期结果2。然而,当我在控制器中运行该代码时,我得到了1。我尝试打开register_globals,得到了相同的结果。也没有php_值覆盖该指令。有趣的是,我在同一个web服务器中有一个测试文件,它打印出了预期结果2。然而,当我在控制器中运行该代码时,我得到了1。此外,PHP作用域阻止访问内部函数/调用中的外部局部变量,尽管这些变量仍然在活动内存中,并且一旦内部函数退出,应用程序流就可以访问这些变量。几乎没有任何限制。在PHP5.3之前,“内部”函数不存在。当您在上述方法内定义函数时,实际上是在全局范围内定义函数(如果调用testglobalAction,您将得到一个致命错误:Cannot redecaler b().PHP 5.3引入了实lambda函数和闭包,并要求您指定要从外部作用域导入的变量。此外,PHP作用域阻止访问内部函数/调用中的外部局部变量,尽管这些变量仍在活动内存中,并且在内部函数存在。几乎不存在。在PHP5.3之前,“内部”函数不存在。当您在如上所述的方法内定义函数时,实际上是在全局范围内定义函数(如果调用testglobalAction,您将得到一个致命错误:无法重新声明b().PHP 5.3引入了实数lambda函数和闭包,并要求您指定要从外部作用域导入哪些变量。