Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
$oUser = new DecoratorUser(new ModuleUser());
$oUser = E::ModuleUser();
И как только будет обращение к классу ModuleUser (создание экземпляра объекта выполняется через вызов специального метода), то… начинается «магия».Как я понимаю — для того чтобы все работало нельзя создавать объект как обычно:
$object = new ModuleUser(); а надо использовать некий специальный метод.$object = E::ModuleUser();
Где E — это класс (singleton), выполняющий функции ядра, и там есть __callStatic, который получает управление и понимает, что нужно создать объект класса ModuleUserЯсно. Но почему вы не хотите использовать для этого отдельную функцию? Например:
$object = newObject('ModuleUser');$object = E::ModuleUser($arg1, $arg2);public static function __callStatic($name, $arguments) { ... }class PluginFirst_ModuleUser extends PluginFirst_Inherits_ModuleUser
{
public function __construct($arg1, $arg2)
{
parent::__construct($arg1, $arg2);
// New code here
}
}
$object = newObject('ModuleUser', array($arg1, $arg2));$object = E::newObject('ModuleUser', array($arg1, $arg2));
$object = E::newModuleUser($arg1, $arg2);
/**
* @method ModuleUser ModuleUser()
*/
class E {
// ...
}
Хук ООП не друг или Динамическое автонаследование классов