Php Zend Framework是否关闭将变量声明为全局变量?

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(); } 当我运行时,它打印出

我正在将第三方代码集成到我在Zend框架中编写的web应用程序中

我要集成的代码将变量声明为全局变量。它自己工作,但当我将它包含在Zend框架中时就不行了。起初,我怀疑Zend框架中存在禁用全局变量声明的情况。我在控制器中有以下测试代码:

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.ini
register\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函数和闭包,并要求您指定要从外部作用域导入哪些变量。