<?php
class Services
{
protected $services = [];
public function getService($id, callback $creator)
{
// Нет в кэше? Берём из creator'а
// Возвращаем кэш
}
}
class Framework extends Services
{
protected $instance = null;
public function __construct()
{
// Что-то
}
public static function getInstance()
{
if (is_null(static::$instance)) {
throw new \Exception('Не инициализировано');
}
return static::$instance;
}
public static function getRouter()
{
return static::getInstance()->getService('framework.router', function() use ($something) {
return new Router($something);
});
}
public static function init()
{
static::$instance = new self();
}
public function run()
{
// Маршрутизация => Контроллер => Выполнение Response
}
}
class CMS extends Framework
{
public static function getModulesManager()
{
return static::getInstance()->getService('cms.modulesmanager', function() use ($a, $b, $c) {
return new ModulesManager($a, $b, $c);
});
}
public function run()
{
// Маршрутизация => Встроенные контроллеры/Модули => Выполнение Response
}
}
// based on framework
Framework::init() && Framework::run();
// где-то в компоненте:
var_dump(Framework::getRouter());
// based on CMS
CMS::init() && CMS::run();
// где-то в модуле:
var_dump(CMS::getRouter());
var_dump(CMS::getModulesManager());
Fatal error: Uncaught Error: Access to undeclared static property Framework::$instance in /in/uD0CD:42
Stack trace:
#0 /in/uD0CD(67): Framework::init()
#1 {main}
thrown in /in/uD0CD on line 42
Process exited with code 255.
Fatal error: Uncaught Error: Access to undeclared static property: Framework::$instance in /in/uD0CD:42
Stack trace:
#0 /in/uD0CD(67): Framework::init()
#1 {main}
thrown in /in/uD0CD on line 42
Process exited with code 255.
Output for 5.5.24 - 5.5.35, 5.6.8 - 5.6.28
Fatal error: Access to undeclared static property: Framework::$instance in /in/uD0CD on line 42
Process exited with code 255.