我正在将第三方代码集成到我在Zend Framework中编写的Web应用程序中。

我要整合的代码将变量声明为全局变量。它可以独立工作,但不是在Zend Framework中包含它时。最初我怀疑Zend Framework中有一些东西禁用了全局变量的声明。我在控制器中有以下测试代码:

public function testglobalAction()
{
   $a = 1;
   function b()
   {
      global $a;
      echo $a*2;
   }

   b();
}

当我运行时,它打印出0,而不是2.最重要的是,在同一个Web服务器上运行相同的代码打印出2。

我知道我可以替换所有全局实例以使用Zend Registry。然而,一个grep告诉我,我必须改变大约700行,所以目前不可行。

有谁知道如何解决这个问题?

有帮助吗?

解决方案

您的原始$ a变量不是全局的。

在方法内部声明的任何变量都是该方法的本地变量,除非先前已在当前范围内声明为全局变量。

试试这个

public function testglobalAction()
{
    global $a;
    $a = 1;
    function b()
    {
        global $a;
        echo $a*2;
    }

    b();
}

其他提示

没有。 Zend Framework不会禁用全局变量,因为它是不可能的。 $ GLOBALS数组由php.ini register_globals 指令控制。它不能在运行时使用 ini_set 进行更改。

请参阅文档以供参考。

注意:检查.htaccess文件是否有任何每个目录 php_value 覆盖。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top