From 30f8f2843a5af635f66421a12283c7bf2275bdf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Mon, 22 Feb 2021 18:51:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HttpServer/Route/Node.php | 2 -- System/Di/Container.php | 47 +++++++++++++++++++++++++-------------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/HttpServer/Route/Node.php b/HttpServer/Route/Node.php index 8b056968..76f42690 100644 --- a/HttpServer/Route/Node.php +++ b/HttpServer/Route/Node.php @@ -17,7 +17,6 @@ use Snowflake\Event; use Snowflake\Exception\ComponentException; use Snowflake\Exception\NotFindClassException; use Snowflake\Snowflake; -use Swoole\Coroutine; use Throwable; use function Input; @@ -445,7 +444,6 @@ class Node extends HttpService */ public function restructure(): static { - var_dump($this->handler); if (empty($this->handler)) { return $this; } diff --git a/System/Di/Container.php b/System/Di/Container.php index f81e489d..2e93f0b2 100644 --- a/System/Di/Container.php +++ b/System/Di/Container.php @@ -13,6 +13,7 @@ use ReflectionClass; use Snowflake\Abstracts\BaseObject; use ReflectionException; use Snowflake\Exception\NotFindClassException; +use Snowflake\Snowflake; /** * Class Container @@ -160,34 +161,29 @@ class Container extends BaseObject * * @return array * @throws ReflectionException + * @throws NotFindClassException */ private function resolveDependencies($class): array { $dependencies = []; - if (!class_exists($class)) { + if (!class_exists($class) || !($reflection = $this->resolveClass($class))) { return []; - } - if (isset($this->_reflection[$class])) { - $reflection = $this->_reflection[$class]; - } else { - $reflection = new ReflectionClass($class); - if (!$reflection->isInstantiable()) { - return []; - } - $this->_reflection[$class] = $reflection; - } + }; $constructs = $reflection->getConstructor(); - if (empty($constructs) || !is_array($constructs)) { + if (!($constructs instanceof \ReflectionMethod)) { return [$reflection, []]; } foreach ($constructs->getParameters() as $key => $param) { - if (version_compare(PHP_VERSION, '5.6.0', '>=') && $param->isVariadic()) { - break; - } else if ($param->isDefaultValueAvailable()) { + if ($param->isOptional()) { $dependencies[] = $param->getDefaultValue(); } else { - $c = $param->getClass(); - $dependencies[] = $c === NULL ? NULL : $c->getName(); + match ($param->getType()) { + 'mixed' => $dependencies[] = $param->getDefaultValue(), + 'string' => $dependencies[] = '', + 'int' => $dependencies[] = 0, + 'bool' => $dependencies[] = false, + default => $dependencies[] = Snowflake::createObject($param->getType()) + }; } } $this->_constructs[$class] = $dependencies; @@ -195,6 +191,23 @@ class Container extends BaseObject } + /** + * @param $class + * @return ReflectionClass|null + */ + private function resolveClass($class): ?ReflectionClass + { + if (!isset($this->_reflection[$class])) { + $reflection = new ReflectionClass($class); + if (!$reflection->isInstantiable()) { + return null; + } + $this->_reflection[$class] = $reflection; + } + return $this->_reflection[$class]; + } + + /** * @param $class * @return mixed