<?php
namespace Fury\Kernel;
/**
* class: AppContainer
* description: container for base application instances
* @author Eugene Sukhodolskiy <e.sukhodolskiy@outlook.com>
* Date: 31.01.2020
* @version 0.1
*/
class AppContainer{
/**
* Array with flags
*
* @var Array
*/
protected static $already_set = [
'bootstrap' => false,
'app' => false,
'events' => false,
'logging' => false
];
/**
* Container with instances
*
* @var array
*/
protected static $container = [];
/**
* Magic method for adding instance to container
* @example AppContainer::set_app($app_instance) or AppContainer::set_bootstrap($app_instance) or ...
*
* @method __callStatic
*
*/
public static function __callStatic(String $name, $args){
try{
if(strpos($name, 'set_') === false){
throw new \Exception('Undefined method ' . $name);
}
list(, $var_name) = explode('set_', $name);
if(!isset(self::$already_set[$var_name])){
throw new \Exception('Undefined method ' . $name);
}
if(!self::$already_set[$var_name]){
self::$already_set[$var_name] = true;
self::$container[$var_name] = $args[0];
return true;
}else{
return false;
}
}catch(\Exception $e){
echo $e -> getMessage();
}
}
/**
* Get application instance
*
* @method app
*
* @return mixed
*/
public static function app(){
return self::$container['app'];
}
/**
* Get bootstrap instance
*
* @method bootstrap
*
* @return mixed
*/
public static function bootstrap(){
return self::$container['bootstrap'];
}
/**
* Get Event instance
*
* @method events
*
* @return Events
*/
public static function events(){
return self::$container['events'];
}
/**
* Get Logging instance
*
* @method logging
*
* @return Logging
*/
public static function logging(){
return self::$container['logging'];
}
}