У меня есть следующая настройка.
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 для каждой части сайта, и я только что изменил что-то в одном из них, оставив старый заказ в другом, теперь он отлично работает после того, как все загрузится в правильном порядке.
Если $ 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 не создается внутри функции / метода?