From d43bc87268f010d67f574c53fe44f408a77537b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Wed, 4 Aug 2021 17:51:33 +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 --- System/Di/Container.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/System/Di/Container.php b/System/Di/Container.php index d54680a3..264a46f8 100644 --- a/System/Di/Container.php +++ b/System/Di/Container.php @@ -107,6 +107,9 @@ class Container extends BaseObject private function resolve($class, $constrict, $config): object { $reflect = $this->resolveDependencies($class); + if (!$reflect->isInstantiable()) { + throw new ReflectionException('Class ' . $class . ' cannot be instantiated'); + } $object = $this->newInstance($reflect, $constrict); @@ -210,13 +213,12 @@ class Container extends BaseObject /** * @param $class * @return ReflectionClass - * @throws ReflectionException */ private function resolveDependencies($class): ReflectionClass { $reflect = new ReflectionClass($class); - if ($reflect->isAbstract() || !$reflect->isInstantiable()) { - throw new ReflectionException('Class ' . $class . ' cannot be instantiated'); + if ($reflect->isAbstract() || $reflect->isTrait() || $reflect->isInterface()) { + return $this->_reflection[$class] = $reflect; } $this->setPropertyNote($reflect); $this->setTargetNote($reflect);