diff --git a/System/Di/Service.php b/System/Di/Service.php index b4fe0a15..4e96977f 100644 --- a/System/Di/Service.php +++ b/System/Di/Service.php @@ -23,140 +23,145 @@ use Snowflake\Snowflake; class Service extends Component { - private array $_components = []; + private array $_components = []; - private array $_definition = []; + private array $_definition = []; - private array $_ids = []; + private array $_ids = []; - protected array $_alias = []; + protected array $_alias = []; - /** - * @param $id - * @param bool $try - * @return mixed - * @throws Exception - */ - public function get($id, $try = true): mixed - { - if (isset($this->_components[$id])) { - return $this->_components[$id]; - } - if (!isset($this->_definition[$id]) && !isset($this->_alias[$id])) { - if ($try === false) { - return null; - } - throw new ComponentException("Unknown component ID: $id"); - } - if (isset($this->_definition[$id])) { - $config = $this->_definition[$id]; - if (is_object($config)) { - return $this->_components[$id] = $config; - } - $object = Snowflake::createObject($config); - } else { - $config = $this->_alias[$id]; + /** + * @param $id + * @param bool $try + * @return mixed + * @throws Exception + */ + public function get($id, $try = true): mixed + { + if (isset($this->_components[$id])) { + return $this->_components[$id]; + } + if (!isset($this->_definition[$id]) && !isset($this->_alias[$id])) { + if ($try === false) { + return null; + } + throw new ComponentException("Unknown component ID: $id"); + } + if (isset($this->_definition[$id])) { + $config = $this->_definition[$id]; + if (is_object($config)) { + return $this->_components[$id] = $config; + } + $object = Snowflake::createObject($config); + } else { + $config = $this->_alias[$id]; - $object = Snowflake::createObject($config); - } - return $this->_components[$id] = $object; - } + $object = Snowflake::createObject($config); + } - /** - * @param string $className - * @param string $alias - */ - public function setAlias(string $className, string $alias) - { - $this->_alias[$className] = $alias; - } + unset($config['class']); - /** - * @param $id - * @param $definition - * - * @return mixed - * @throws Exception - */ - public function set($id, $definition): mixed - { - if ($definition === NULL) { - return $this->remove($id); - } + Snowflake::configure($object, $config); - $this->_ids[] = $id; + return $this->_components[$id] = $object; + } - unset($this->_components[$id]); - if (is_object($definition) || is_callable($definition, TRUE)) { - return $this->_definition[$id] = $definition; - } else if (!is_array($definition)) { - throw new ComponentException("Unexpected configuration type for the \"$id\" component: " . gettype($definition)); - } - if (!isset($definition['class'])) { - throw new ComponentException("The configuration for the \"$id\" component must contain a \"class\" element."); - } else { - $this->_definition[$id] = $definition; - } - return $this->get($id); - } + /** + * @param string $className + * @param string $alias + */ + public function setAlias(string $className, string $alias) + { + $this->_alias[$className] = $alias; + } - /** - * @param $id - * @return bool - */ - #[Pure] public function has($id): bool - { - return in_array($id, $this->_ids); - } + /** + * @param $id + * @param $definition + * + * @return mixed + * @throws Exception + */ + public function set($id, $definition): mixed + { + if ($definition === NULL) { + return $this->remove($id); + } - /** - * @param array $data - * @throws Exception - */ - public function setComponents(array $data) - { - foreach ($data as $key => $val) { - $this->set($key, $val); - } - } + $this->_ids[] = $id; + + unset($this->_components[$id]); + if (is_object($definition) || is_callable($definition, TRUE)) { + return $this->_definition[$id] = $definition; + } else if (!is_array($definition)) { + throw new ComponentException("Unexpected configuration type for the \"$id\" component: " . gettype($definition)); + } + if (!isset($definition['class'])) { + throw new ComponentException("The configuration for the \"$id\" component must contain a \"class\" element."); + } else { + $this->_definition[$id] = $definition; + } + return $this->get($id); + } + + /** + * @param $id + * @return bool + */ + #[Pure] public function has($id): bool + { + return in_array($id, $this->_ids); + } + + /** + * @param array $data + * @throws Exception + */ + public function setComponents(array $data) + { + foreach ($data as $key => $val) { + $this->set($key, $val); + } + } - /** - * @param $name - * @return mixed - * @throws Exception - */ - public function __get($name): mixed - { - if ($this->has($name)) { - return $this->get($name); - } + /** + * @param $name + * @return mixed + * @throws Exception + */ + public function __get($name): mixed + { + if ($this->has($name)) { + return $this->get($name); + } - return parent::__get($name); - } + return parent::__get($name); + } - /** - * @param $id - * @return bool - */ - public function remove($id): bool - { - $component = $this->_components[$id]; - $className = $component::class; + /** + * @param $id + * @return bool + */ + public function remove($id): bool + { + $component = $this->_components[$id]; + $className = $component::class; - unset($component, $this->_components[$id]); - unset($this->_definition[$id]); - if (isset($this->_alias[$id])) { - unset($this->_components[$this->_alias[$id]]); - unset($this->_definition[$this->_alias[$id]]); - unset($this->_alias[$id]); - } + unset($component, $this->_components[$id]); + unset($this->_definition[$id]); + if (isset($this->_alias[$id])) { + unset($this->_components[$this->_alias[$id]]); + unset($this->_definition[$this->_alias[$id]]); + unset($this->_alias[$id]); + } - Snowflake::getDi()->unset($className); + Snowflake::getDi()->unset($className); - return $this->has($id); - } + return $this->has($id); + } }