Отключает ли Zend Framework объявление переменных как глобальных? - PullRequest
1 голос
/ 30 июля 2009

Я интегрирую сторонний код в веб-приложение, которое пишу в Zend Framework.

Код, который я хочу интегрировать, объявляет переменные как глобальные. Он работает сам по себе, но не тогда, когда я включаю его в Zend Framework. Первоначально я подозревал, что в Zend Framework есть что-то, что запрещает объявление глобальных переменных. У меня есть следующий тестовый код в контроллере:

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

   b();
}

Когда я запускаю, он выводит 0, а не 2. Кроме того, при запуске того же самого кода на том же веб-сервере он печатает 2.

Я понимаю, что мог бы заменить все глобальные экземпляры для использования Zend Registry. Тем не менее, grep показал мне, что мне нужно поменять примерно 700 строк, так что в настоящий момент это невозможно.

Кто-нибудь знает, как я могу решить эту проблему?

Ответы [ 2 ]

8 голосов
/ 30 июля 2009

Ваша исходная переменная $ не является глобальной.

Любая переменная, объявленная внутри метода, является локальной для этого метода, , если не была ранее объявлена ​​глобальной в текущей области.

Попробуйте это

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

    b();
}
1 голос
/ 30 июля 2009

Нет. Zend Framework не отключает глобальные переменные, поскольку это невозможно. Массив $ GLOBALS управляется директивой php.ini register_globals. Его нельзя изменить во время выполнения, используя ini_set.

См. документацию для справки.

Примечание: Проверьте файлы .htaccess на наличие переопределений для каждого каталога php_value.

...