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); } }