PHP и некоторые глобальные переменные - PullRequest
0 голосов
/ 27 августа 2009
require_once'modules/logger.php';                                                         
$Logger = new Logger();

require_once 'templates/list.php';
$Templates = new templatesList();

require_once 'widgets/list.php';
$Widgets = new widgetsList();

Я использую $Logger в templates/list.php и widgets/list.php. $Templates Я использую в /widgets/list.php.

Код выше выдает эту ошибку:

Примечание: неопределенная переменная: Logger in .../templates/list.php в строке 99 Неустранимая ошибка: вызов функции-члена toLog() на необъекте в .../templates/list.php в строке 99

UPD Вот строка 99:

$Logger->toLog( $contentData );

Ответы [ 2 ]

2 голосов
/ 27 августа 2009

Если вы хотите использовать $Logger из метода объекта, вам необходимо пометить его как глобальный в этом методе. Если вы этого не сделаете, то создадите новую локальную переменную $ Logger. Я подозреваю, что в этом проблема. Например:

class templatesList {
    public function __construct() {
        global $Logger;
        //now we can use $logger.
    }
}

Однако, вероятно, было бы лучше передать $ Logger в конструктор каждого объекта, который должен его использовать. Глобальные переменные обычно не считаются хорошей практикой.

class templatesList {
    protected $Logger;
    public function __construct(Logger $Logger) {
        //now we can use $logger.

        //store reference we can use later
        $this->Logger = $Logger;
    }

    public function doSomething() {
        $this->Logger->log('something');
    }
}

new templatesList($Logger);
0 голосов
/ 27 августа 2009

Вы уверены, что не отключаете $ Logger где-нибудь в начале /templates/list.php?

Попробуйте var_dumping () $ Logger после его инициализации и перед использованием.

...