Intereting Posts
вложенное require_once с абсолютным путём не работает Почему это регулярное выражение PHP не извлекает url из значения css? Сверхъестественное поведение на странице facebook Использовать API OAuth или Public Key для частного приложения YouTube? Получить корневую запись DNS с сервера php; получить доменное имя без www, ect Yii :: t () комплексный перевод с добавлением результатов differenet iva aprameter Laravel 5: как я могу получить и отобразить все сообщения, относящиеся к определенной категории Laravel 4, jQuery .ajax, Нет сообщений, полученных Когда я использую c9.io, как я могу подключиться к MySQL? Разбор медиа RSS с помощью XMLReader Как отформатировать миллисекунды в минутах: секунды: миллисекунды в PHP? sfValidatorDoctrineUnique не выполняется заглавными буквами как добавить арабские буквы в url regex Как разобрать данные Json из openlibrary api? (должным образом) API-интерфейс Foursquare для ошибки изображения пользователя сайта

Строгие стандарты PHP: создание объекта по умолчанию из пустого значения

У меня есть следующая настройка.

index.php

require_once "common.php"; ... 

common.php

  ... $obj = new MyClass; require_once "config.php" ... 

config.php

  ... require_once "settings.php"; ... 

settings.php

  $obj->dostuff = true; ... 

Когда я открываю index.php, я получаю: Строгие стандарты: создание объекта по умолчанию из пустого значения в settings.php на 3

Если я ставлю $obj->dostuff = true; внутри config.php он не выводит сообщение об ошибке.

Может кто-нибудь объяснить, почему я получаю эту ошибку? Я не спрашиваю, как это исправить, просто поймите, почему.

EDIT: У меня плохо, у меня было 2 файла config.php для каждой части сайта, и я только что изменил что-то в одном из них, оставив старый заказ в другом, теперь он отлично работает после того, как все загрузится в правильном порядке.

Solutions Collecting From Web of "Строгие стандарты PHP: создание объекта по умолчанию из пустого значения"

Если $ obj означает глобальный доступ к системе, вы можете использовать шаблон singleton для доступа из любого места:

 class MyClass { protected static $_instance; static function getInstance() { if (null === self::$_instance) { self::$_instance = new self(); } return self::$_instance; } } 

Затем вы можете создать свои методы в этом классе. Чтобы получить сам объект, просто вызовите:

 $obj = MyClass::getInstance(); 

Кроме того, если вы просто хотите вызвать один из своих методов, но нет необходимости возвращать что-либо:

 MyClass::getInstance()->objectMethod(); 

Я считаю, что это очень эффективный способ организовать интегральные одноэлементные системные операции.

На практике мой проект использует это для получения конфигурации из любой точки системы:

 class syConfig { protected static $_instance; private $_config; static function getInstance() { if (null === self::$_instance) { self::$_instance = new self(); } return self::$_instance; } public function load($xmlString) { $xml = simplexml_load_string($xmlString); $this->_config = $xml; } public function getConfig() { return $this->_config; } } 

Это выглядит проблемой. В settings.php $ obj недоступен. PHP создает новый из стандартного класса и дает вам предупреждение. Вы можете подтвердить это, поставив

 echo get_class($obj); 

в ваши settings.php, сразу после строки, которая создает ошибку. Если это эхо «StdClass», то это так.

Вы уверены, что $ obj не создается внутри функции / метода?