think\App::invokeClass PHP Method

invokeClass() public static method

调用反射执行类的实例化 支持依赖注入
public static invokeClass ( string $class, array $vars = [] ) : mixed
$class string 类名
$vars array 变量
return mixed
    public static function invokeClass($class, $vars = [])
    {
        $reflect = new \ReflectionClass($class);
        $constructor = $reflect->getConstructor();
        if ($constructor) {
            $args = self::bindParams($constructor, $vars);
        } else {
            $args = [];
        }
        return $reflect->newInstanceArgs($args);
    }

Usage Example

Example #1
0
 /**
  * 实例化(分层)控制器 格式:[模块名/]控制器名
  * @param string $name         资源地址
  * @param string $layer        控制层名称
  * @param bool   $appendSuffix 是否添加类名后缀
  * @param string $empty        空控制器名称
  * @return Object|false
  * @throws ClassNotFoundException
  */
 public static function controller($name, $layer = 'controller', $appendSuffix = false, $empty = '')
 {
     if (strpos($name, '/')) {
         list($module, $name) = explode('/', $name);
     } else {
         $module = Request::instance()->module();
     }
     $class = self::parseClass($module, $layer, $name, $appendSuffix);
     if (class_exists($class)) {
         return App::invokeClass($class);
     } elseif ($empty && class_exists($emptyClass = self::parseClass($module, $layer, $empty, $appendSuffix))) {
         return new $emptyClass(Request::instance());
     }
 }