1

我正在将第三方代码集成到我在 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 行需要更改,因此目前不可行。

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

4

2 回答 2

8

你原来的 $a 变量不是全局的。

任何在方法内部声明的变量都是该方法的局部变量,除非它之前在当前范围内被声明为全局变量。

试试这个

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

    b();
}
于 2009-07-30T05:32:34.340 回答
1

不,Zend 框架不会禁用全局变量,因为这是不可能的。$GLOBALS 数组由 php.iniregister_globals指令控制。它不能在运行时使用ini_set.

请参阅文档以供参考。

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

于 2009-07-30T04:25:03.760 回答