From df8e3d6d610d0a8f611bd488c349638498b8d875 Mon Sep 17 00:00:00 2001 From: thinkphp Date: Fri, 15 Jan 2016 14:19:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9BLoader=E7=B1=BBaction?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E7=9A=84=E9=94=99=E8=AF=AF=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/App.php | 3 --- library/think/Loader.php | 18 ++++++------------ 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/library/think/App.php b/library/think/App.php index 5e04f2ef..0459c0cf 100644 --- a/library/think/App.php +++ b/library/think/App.php @@ -233,9 +233,6 @@ class App $action = ACTION_NAME . Config::get('action_suffix'); } - if (!$instance) { - throw new Exception('class [ ' . Loader::parseClass(MODULE_NAME, CONTROLLER_LAYER, CONTROLLER_NAME) . ' ] not exists', 10001); - } try { // 操作方法开始监听 $call = [$instance, $action]; diff --git a/library/think/Loader.php b/library/think/Loader.php index 4eb0056a..809cefe5 100644 --- a/library/think/Loader.php +++ b/library/think/Loader.php @@ -131,7 +131,6 @@ class Loader { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; } } @@ -153,7 +152,6 @@ class Loader } } } - // PSR-0 lookup if (false !== $pos = strrpos($class, '\\')) { // namespaced class name @@ -175,7 +173,6 @@ class Loader } } } - // Remember that this class does not exist. return self::$map[$class] = false; } @@ -314,10 +311,10 @@ class Loader $action = new $class; $_instance[$name . $layer] = $action; return $action; - } elseif ($empty && class_exists($class = self::parseClass($module, $layer, $empty))) { - return new $class; + } elseif ($empty && class_exists($emptyClass = self::parseClass($module, $layer, $empty))) { + return new $emptyClass; } else { - return false; + throw new Exception('class [ ' . $class . ' ] not exists', 10001); } } @@ -349,9 +346,8 @@ class Loader if (is_string($vars)) { parse_str($vars, $vars); } - return call_user_func_array([ & $class, $action . Config::get('action_suffix')], $vars); - } else { - return false; + $method = new \ReflectionMethod($class, $action . Config::get('action_suffix')); + return $method->invokeArgs($class, $vars); } } /** @@ -375,11 +371,9 @@ class Loader } else { $_instance[$identify] = $o; } - } else { throw new Exception('class not exist :' . $class, 10007); } - } return $_instance[$identify]; } @@ -409,6 +403,6 @@ class Loader */ public static function parseClass($module, $layer, $name) { - return APP_NAMESPACE . '\\' . (APP_MULTI_MODULE ? $module . '\\' : '') . $layer . '\\' . self::parseName(str_replace('/', '\\', $name), 1); + return APP_NAMESPACE . '\\' . (APP_MULTI_MODULE ? $module . '\\' : '') . $layer . '\\' . self::parseName(str_replace(['/', '.'], '\\', $name), 1); } }