Пространство имен PHP и глобальные переменные внутри классов - PullRequest
3 голосов
/ 04 декабря 2011

Я застрял в этой путанице, когда не понимаю, почему моя глобальная ошибка $ в моем HelperClass () возвращает пустое значение, где я мог убедиться, что ошибка $ class-> действительно заполнена данными ранее.

Есть ли какие-то проблемы с пространством имен в этом случае, о которых я не знаю? Пожалуйста, дайте мне несколько советов.

Вот некоторые коды, которые имеют отношение к делу.

Под основным файлом

namespace Core;
$class = new ControllerClass();
$error = $class->error;
// verified that $error prints correctly here
include ViewFile.php;

Под ViewFile.php

$helper = new HelperClass();
// __autoload function took care of the include

Под HelperClass:

namespace Core\Skeleton;

class HelperClass {
public function __construct() {
global $error;
// $error != $class->error as defined earlier    
// $error is empty here
}

1 Ответ

9 голосов
/ 04 декабря 2011

Если вы используете автозагрузчик или включаете свои классы из другой вспомогательной функции, то переменная $error никогда не объявлялась в «глобальной» области видимости.Он оказался в каком-то локальном месте и был удален.

Объявите его совместно используемым непосредственно перед тем, как назначить ему значение.

namespace Core;
$class = new ControllerClass();
global $error;
$error = $class->error;

Кроме того, нет ничего плохого в общих переменных как таковых.Название $error кажется немного слишком общим.Возможно, вы можете использовать менее амбициозную или более структурированную переменную обмена.$GLOBALS["/var/log"]["controller_error"] или что-то массивное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...