«глобальный» не работает в представлениях CakePHP 2.1.1 - PullRequest
0 голосов
/ 30 марта 2012

Я использую PHP 5.3.8 с CakePHP 2.1.1.

Это мой вид (макет пустой, на самом деле он выводит только сам вид)

<?php   
// $present is not a view variable
$present = 'Hello World!';

class ApplicationsPDF
{   
    public function CreateApplicationTable()
    {
        global $present;
        exit(var_dump($present));
    }
}


$pdf = new ApplicationsPDF();
$pdf->CreateApplicationTable();
?>

Вывод null вместо «Hello World!».

Если я скопирую и вставлю этот код в один файл (который я запускаю прямо из браузера), он отлично работает!

Так что это, должно быть, ошибка в CakePHP. Кто-нибудь знает это?

Ответы [ 2 ]

0 голосов
/ 05 мая 2012

Это не PHP и не ошибка CakePHP!

Это потому, что CakePHP включает представление в свой класс представлений, поэтому объявленные переменные в действительности не находятся в глобальной области видимости, и global не имеет никакого эффекта.

Из ADmad ( источник ):

Когда вы запускаете файл самостоятельно, ваше назначение $ testVar = 'Hello Мир!' в глобальном контексте, следовательно, все работает так, как вы ожидали к. Но когда он используется в качестве файла представления, файл включается в Просмотреть функцию класса, следовательно, ее больше нет в глобальном контексте и $ testVar больше не глобальная переменная, поэтому ваши ожидания неверны. С помощью глобальные переменные в структуре ООП в любом случае плохая идея.

0 голосов
/ 30 марта 2012

Попробуйте объявить глобальное ключевое слово перед определением класса:

global $present;

class ApplicationsPDF
{   
    public function CreateApplicationTable()
    {
        exit(var_dump($present));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...