App
// 执行应用程序
App::run(Request $request = null);

// 设置当前请求的调度信息
App::dispatch($dispatch, $type = 'module');

// 执行函数或者闭包方法 支持参数调用
App::invokeFunction($function, $vars = []);

// 调用反射执行类的方法 支持参数绑定
App::invokeMethod($method, $vars = []);

// 调用反射执行类的实例化 支持依赖注入
App::invokeClass($class, $vars = []);

// 绑定参数
App::bindParams($reflect, $vars = []);

// 执行模块
App::module($result, $config, $convert = null);

// 初始化应用
App::initCommon();

// 初始化应用或模块
App::init($module = '');

// URL路由检测(根据PATH_INFO)
App::routeCheck($request, array $config);

// 设置应用的路由检测机制
App::route($route, $must = false);复制代码
Build
// 根据传入的build资料创建目录和文件
Build::run(array $build = [], $namespace = 'app', $suffix = false);

// 创建目录
Build::buildDir($list);

// 创建文件
Build::buildFile($list);

// 创建模块
Build::module($module = '', $list = [], $namespace = 'app', $suffix = false);

// 创建模块的欢迎页面
Build::buildHello($module, $namespace, $suffix = false);

// 创建模块的公共文件
Build::buildCommon($module);复制代码
Cache
// 连接缓存
Cache::connect(array $options = [], $name = false);

// 自动初始化缓存
Cache::init(array $options = []);

// 切换缓存类型 需要配置 cache.type 为 complex
Cache::store($name = '');

// 判断缓存是否存在
Cache::has($name);

// 读取缓存
Cache::get($name, $default = false);

// 写入缓存
Cache::set($name, $value, $expire = null);

// 自增缓存(针对数值缓存)
Cache::inc($name, $step = 1);

// 自减缓存(针对数值缓存)
Cache::dec($name, $step = 1);

// 删除缓存
Cache::rm($name);

// 清除缓存
Cache::clear($tag = null);

// 读取缓存并删除
Cache::pull($name);

// 如果不存在则写入缓存
Cache::remember($name, $value, $expire = null);

// 缓存标签
Cache::tag($name, $keys = null, $overlay = false);复制代码
Config
// 解析配置文件或内容
Config::parse($config, $type = '', $name = '', $range = '');

// 加载配置文件(PHP格式)
Config::load($file, $name = '', $range = '');

// 检测配置是否存在
Config::has($name, $range = '');

// 获取配置参数 为空则获取所有配置
Config::get($name = null, $range = '');

// 设置配置参数 name为数组则为批量设置
Config::set($name, $value = null, $range = '');

// 重置配置参数
Config::reset($range = '');复制代码
Controller
$controller = new think\Controller();

// 前置操作
$controller->beforeAction($method, $options = []);

// 加载模板输出
$controller->fetch($template = '', $vars = [], $replace = [], $config = []);

// 渲染内容输出
$controller->display($content = '', $vars = [], $replace = [], $config = []);

// 模板变量赋值
$controller->assign($name, $value = '');

// 初始化模板引擎
$controller->engine($engine);

// 设置验证失败后是否抛出异常
$controller->validateFailException($fail = true);

// 验证数据
$controller->validate($data, $validate, $message = [], $batch = false, $callback = null);复制代码
Console
Console::init($run = true);

Console::call($command, array $parameters = [], $driver = 'buffer');

$console = new think\Console();
// 执行当前的指令
$console->run();

// 执行指令
$console->doRun(Input $input, Output $output);

// 设置输入参数定义
$console->setDefinition(InputDefinition $definition);

// 获取输入参数定义
$console->getDefinition();

// Gets the help message.
$console->getHelp();

// 是否捕获异常
$console->setCatchExceptions($boolean);

// 是否自动退出
$console->setAutoExit($boolean);

// 获取名称
$console->getName();

// 设置名称
$console->setName($name);

// 获取版本
$console->getVersion();

// 设置版本
$console->setVersion($version);

// 获取完整的版本号
$console->getLongVersion();

// 注册一个指令
$console->register($name);

// 添加指令
$console->addCommands(array $commands);

// 添加一个指令
$console->add(Command $command);

// 获取指令
$console->get($name);

// 某个指令是设置默认命令否存在
$console->has($name);

// 获取所有的命名空间
$console->getNamespaces();

// 查找注册命名空间中的名称或缩写。
$console->findNamespace($namespace);

// 查找指令
$console->find($name);

// 获取所有的指令
$console->all($namespace = null);

// 获取可能的指令名
Console::getAbbreviations($names);

// 配置基于用户的参数和选项的输入和输出实例。
$this->configureIO(Input $input, Output $output);

// 执行指令
$this->doRunCommand(Command $command, Input $input, Output $output);

// 获取指令的基础名称
$this->getCommandName(Input $input);

// 获取默认输入定义
$this->getDefaultInputDefinition();

// 设置默认命令
$this->getDefaultCommands();

Console::addDefaultCommands(array $classnames);

// 获取可能的建议
$this->getAbbreviationSuggestions($abbrevs);

// 返回命名空间部分
$console->extractNamespace($name, $limit = null);

// 查找可替代的建议
$this->findAlternatives($name, $collection);

// 设置默认的指令
$console->setDefaultCommand($commandName);

// 返回所有的命名空间
$this->extractAllNamespaces($name);复制代码
File
$file = new File('test.txt', 'a');

//是否测试
$file->isTest($test = false);

// 设置上传信息
$file->setUploadInfo($info);

// 获取上传文件的信息
$file->getInfo($name = '');

// 获取上传文件的文件名
$file->getSaveName();

// 设置上传文件的保存文件名
$file->setSaveName($saveName);

// 获取文件的哈希散列值
$file->hash($type = 'sha1');

// 检查目录是否可写
$this->checkPath($path);

// 获取文件类型信息
$file->getMime();

// 设置文件的命名规则
$file->rule($rule);

// 设置上传文件的验证规则
$file->validate($rule = []);

// 检测是否合法的上传文件
$file->isValid();

// 检测上传文件
$file->check($rule = []);

// 检测上传文件后缀
$file->checkExt($ext);

// 检测图像文件
$file->checkImg();

// 判断图像类型
$this->getImageType($image);

// 检测上传文件大小
$file->checkSize($size);

// 检测上传文件类型
$file->checkMime($mime);

 /**
 * 移动文件
 * @param  string           $path    保存路径
 * @param  string|bool      $savename    保存的文件名 默认自动生成
 * @param  boolean          $replace 同名文件是否覆盖
 * @return false|SplFileInfo false-失败 否则返回SplFileInfo实例
 */
$file->move($path, $savename = true, $replace = true);

// 获取保存文件名
$this->buildSaveName($savename);

// 获取错误代码信息
$this->error($errorNo);

// 获取错误信息
$file->getError();复制代码
Cookie
// Cookie初始化
Cookie::init();

// 设置或者获取cookie作用域(前缀)
Cookie::prefix($prefix = '');

// Cookie 设置、获取、删除
Cookie::set($name, $value = '', $option = null);

// 永久保存Cookie数据
Cookie::forever($name, $value = '', $option = null);

// 判断Cookie数据
Cookie::has($name, $prefix = null);

// Cookie获取
Cookie::get($name, $prefix = null);

// Cookie删除
Cookie::delete($name, $prefix = null);

// Cookie清空
Cookie::clear($prefix = null);

Cookie::jsonFormatProtect(&$val, $key, $type = 'encode');复制代码
Db
// 数据库初始化 并取得数据库类实例
Db::connect($config = [], $name = false);

// 数据库连接参数解析
Db::parseConfig($config);

// DSN解析
// 格式: mysql://username:passwd@localhost:3306/DbName?param1=val1¶m2=val2#utf8
Db::parseDsn($dsnStr);

// 调用驱动类的方法
Db::__callStatic($method, $params);复制代码
Debug
// 记录时间(微秒)和内存使用情况
Debug::remark($name, $value = '');

// 统计某个区间的时间(微秒)使用情况
Debug::getRangeTime($start, $end, $dec = 6);

// 统计从开始到统计时的时间(微秒)使用情况
Debug::getUseTime($dec = 6);

// 获取当前访问的吞吐率情况
Debug::getThroughputRate();

// 记录区间的内存使用情况
Debug::getRangeMem($start, $end, $dec = 2);

// 统计从开始到统计时的内存使用情况
Debug::getUseMem($dec = 2);

// 统计区间的内存峰值情况
Debug::getMemPeak($start, $end, $dec = 2);

// 获取文件加载信息
Debug::getFile($detail = false);

// 浏览器友好的变量输出
Debug::dump($var, $echo = true, $label = null, $flags = ENT_SUBSTITUTE);

Debug::inject(Response $response, &$content);复制代码
Exception
/**
 * 设置异常额外的Debug数据
 * 数据将会显示为下面的格式
 *
 * Exception Data
 * --------------------------------------------------
 * Label 1
 *   key1      value1
 *   key2      value2
 * Label 2
 *   key1      value1
 *   key2      value2
 *
 * @param string $label 数据分类,用于异常页面显示
 * @param array  $data  需要显示的数据,必须为关联数组
 */
$this->setData($label, array $data);

/**
 * 获取异常额外Debug数据
 * 主要用于输出到异常页面便于调试
 * @return array 由setData设置的Debug数据
 */
$this->getData();复制代码
Env
// 获取环境变量值
Env::get($name, $default = null);复制代码
Hook
/**
 * 动态添加行为扩展到某个标签
 * @param string    $tag 标签名称
 * @param mixed     $behavior 行为名称
 * @param bool      $first 是否放到开头执行
 * @return void
 */
Hook::add($tag, $behavior, $first = false);

/**
 * 批量导入插件
 * @param array        $tags 插件信息
 * @param boolean     $recursive 是否递归合并
 */
Hook::import(array $tags, $recursive = true);

 /**
 * 获取插件信息
 * @param string $tag 插件位置 留空获取全部
 * @return array
 */
 Hook::get($tag = '');

 /**
 * 监听标签的行为
 * @param string $tag    标签名称
 * @param mixed  $params 传入参数
 * @param mixed  $extra  额外参数
 * @param bool   $once   只获取一个有效返回值
 * @return mixed
 */
Hook::listen($tag, &$params = null, $extra = null, $once = false);

/**
 * 执行某个行为
 * @param mixed     $class 要执行的行为
 * @param string    $tag 方法名(标签名)
 * @param Mixed     $params 传人的参数
 * @param mixed     $extra 额外参数
 * @return mixed
 */
Hook::exec($class, $tag = '', &$params = null, $extra = null);复制代码
Helper
// 快速导入Traits PHP5.5以上无需调用
load_trait($class, $ext = EXT);

// 抛出异常处理
exception($msg, $code = 0, $exception = '');

/**
 * 记录时间(微秒)和内存使用情况
 * @param string            $start 开始标签
 * @param string            $end 结束标签
 * @param integer|string    $dec 小数位 如果是m 表示统计内存占用
 * @return mixed
 */
debug($start, $end = '', $dec = 6);

/**
 * 获取语言变量值
 * @param string    $name 语言变量名
 * @param array     $vars 动态变量值
 * @param string    $lang 语言
 * @return mixed
 */
lang($name, $vars = [], $lang = '');

/**
 * 获取和设置配置参数
 * @param string|array  $name 参数名
 * @param mixed         $value 参数值
 * @param string        $range 作用域
 * @return mixed
 */
config($name = '', $value = null, $range = '');

/**
 * 获取输入数据 支持默认值和过滤
 * @param string    $key 获取的变量名
 * @param mixed     $default 默认值
 * @param string    $filter 过滤方法
 * @return mixed
 */
input($key = '', $default = null, $filter = '');

/**
 * 渲染输出Widget
 * @param string    $name Widget名称
 * @param array     $data 传入的参数
 * @return mixed
 *
widget($name, $data = []);

/**
 * 实例化Model
 * @param string    $name Model名称
 * @param string    $layer 业务层名称
 * @param bool      $appendSuffix 是否添加类名后缀
 * @return \think\Model
 */
model($name = '', $layer = 'model', $appendSuffix = false);

/**
 * 实例化验证器
 * @param string    $name 验证器名称
 * @param string    $layer 业务层名称
 * @param bool      $appendSuffix 是否添加类名后缀
 * @return \think\Validate
 */
validate($name = '', $layer = 'validate', $appendSuffix = false);

/**
 * 实例化数据库类
 * @param string        $name 操作的数据表名称(不含前缀)
 * @param array|string  $config 数据库配置参数
 * @param bool          $force 是否强制重新连接
 * @return \think\db\Query
 */
db($name = '', $config = [], $force = true);

/**
 * 实例化控制器 格式:[模块/]控制器
 * @param string    $name 资源地址
 * @param string    $layer 控制层名称
 * @param bool      $appendSuffix 是否添加类名后缀
 * @return \think\Controller
 */
controller($name, $layer = 'controller', $appendSuffix = false);

/**
 * 调用模块的操作方法 参数格式 [模块/控制器/]操作
 * @param string        $url 调用地址
 * @param string|array  $vars 调用参数 支持字符串和数组
 * @param string        $layer 要调用的控制层名称
 * @param bool          $appendSuffix 是否添加类名后缀
 * @return mixed
 */
action($url, $vars = [], $layer = 'controller', $appendSuffix = false);

/**
 * 导入所需的类库 同java的Import 本函数有缓存功能
 * @param string    $class 类库命名空间字符串
 * @param string    $baseUrl 起始路径
 * @param string    $ext 导入的文件扩展名
 * @return boolean
 */
import($class, $baseUrl = '', $ext = EXT);

/**
 * 快速导入第三方框架类库 所有第三方框架的类库文件统一放到 系统的Vendor目录下面
 * @param string    $class 类库
 * @param string    $ext 类库后缀
 * @return boolean
 */
vendor($class, $ext = EXT);

/**
 * 浏览器友好的变量输出
 * @param mixed     $var 变量
 * @param boolean   $echo 是否输出 默认为true 如果为false 则返回输出字符串
 * @param string    $label 标签 默认为空
 * @return void|string
 */
dump($var, $echo = true, $label = null);

/**
 * Url生成
 * @param string        $url 路由地址
 * @param string|array  $vars 变量
 * @param bool|string   $suffix 生成的URL后缀
 * @param bool|string   $domain 域名
 * @return string
 */
url($url = '', $vars = '', $suffix = true, $domain = false);

/**
 * Session管理
 * @param string|array  $name session名称,如果为数组表示进行session设置
 * @param mixed         $value session值
 * @param string        $prefix 前缀
 * @return mixed
 */
session($name, $value = '', $prefix = null);

/**
 * Cookie管理
 * @param string|array  $name cookie名称,如果为数组表示进行cookie设置
 * @param mixed         $value cookie值
 * @param mixed         $option 参数
 * @return mixed
 */
cookie($name, $value = '', $option = null);

/**
 * 缓存管理
 * @param mixed     $name 缓存名称,如果为数组表示进行缓存设置
 * @param mixed     $value 缓存值
 * @param mixed     $options 缓存参数
 * @param string    $tag 缓存标签
 * @return mixed
 */
cache($name, $value = '', $options = null, $tag = null);

/**
 * 记录日志信息
 * @param mixed     $log log信息 支持字符串和数组
 * @param string    $level 日志级别
 * @return void|array
 */
trace($log = '[think]', $level = 'log');

// 获取当前Request对象实例
request();

/**
 * 创建普通 Response 对象实例
 * @param mixed      $data   输出数据
 * @param int|string $code   状态码
 * @param array      $header 头信息
 * @param string     $type
 * @return Response
 */
response($data = [], $code = 200, $header = [], $type = 'html');

/**
 * 渲染模板输出
 * @param string    $template 模板文件
 * @param array     $vars 模板变量
 * @param array     $replace 模板替换
 * @param integer   $code 状态码
 * @return \think\response\View
 */
view($template = '', $vars = [], $replace = [], $code = 200);

/**
 * 获取\think\response\Json对象实例
 * @param mixed   $data 返回的数据
 * @param integer $code 状态码
 * @param array   $header 头部
 * @param array   $options 参数
 * @return \think\response\Json
 */
json($data = [], $code = 200, $header = [], $options = []);

/**
 * 获取\think\response\Jsonp对象实例
 * @param mixed   $data    返回的数据
 * @param integer $code    状态码
 * @param array   $header 头部
 * @param array   $options 参数
 * @return \think\response\Jsonp
 */
jsonp($data = [], $code = 200, $header = [], $options = []);

/**
 * 获取\think\response\Xml对象实例
 * @param mixed   $data    返回的数据
 * @param integer $code    状态码
 * @param array   $header  头部
 * @param array   $options 参数
 * @return \think\response\Xml
 */
xml($data = [], $code = 200, $header = [], $options = []);

/**
 * 获取\think\response\Redirect对象实例
 * @param mixed         $url 重定向地址 支持Url::build方法的地址
 * @param array|integer $params 额外参数
 * @param integer       $code 状态码
 * @param array         $with 隐式传参
 * @return \think\response\Redirect
 */
redirect($url = [], $params = [], $code = 302, $with = []);

/**
 * 抛出HTTP异常
 * @param integer|Response      $code 状态码 或者 Response对象实例
 * @param string                $message 错误信息
 * @param array                 $header 参数
 */
abort($code, $message = null, $header = []);

// 调试变量并且中断输出
halt($var);

/**
 * 生成表单令牌
 * @param string $name 令牌名称
 * @param mixed  $type 令牌生成方法
 * @return string
 */
token($name = '__token__', $type = 'md5');

/**
 * 延迟预载入关联查询
 * @param mixed $resultSet 数据集
 * @param mixed $relation 关联
 * @return array
 */
load_relation($resultSet, $relation);

// 数组转换为数据集对象
collection($resultSet);复制代码
Lang
/**
 * 设置语言定义(不区分大小写)
 * @param string|array  $name 语言变量
 * @param string        $value 语言值
 * @param string        $range 语言作用域
 * @return mixed
 */
Lang::set($name, $value = null, $range = '');

/**
 * 加载语言定义(不区分大小写)
 * @param string $file 语言文件
 * @param string $range 语言作用域
 * @return mixed
 *
 Lang::load($file, $range = '');

 /**
 * 获取语言定义(不区分大小写)
 * @param string|null   $name 语言变量
 * @param array         $vars 变量替换
 * @param string        $range 语言作用域
 * @return mixed
 */
Lang::has($name, $range = '');

/**
 * 获取语言定义(不区分大小写)
 * @param string|null   $name 语言变量
 * @param array         $vars 变量替换
 * @param string        $range 语言作用域
 * @return mixed
 */
Lang::get($name = null, $vars = [], $range = '');

// 自动侦测设置获取语言选择
Lang::detect();

// 设置语言自动侦测的变量
Lang::setLangDetectVar($var);

// 设置语言的cookie保存变量
Lang::setLangCookieVar($var);

// 设置语言的cookie的过期时间
Lang::setLangCookieExpire($expire);

// 设置允许的语言列表
Lang::setAllowLangList($list);复制代码
Loader
// 自动加载
Loader::autoload($class);

// 查找文件
Loader::findFile($class);

// 注册classmap
Loader::addClassMap($class, $map = '');

// 注册命名空间
Loader::addNamespace($namespace, $path = '');

// 添加Ps0空间
Loader::addPsr0($prefix, $paths, $prepend = false);

// 添加Psr4空间
Loader::addPsr4($prefix, $paths, $prepend = false);

// 注册命名空间别名
Loader::addNamespaceAlias($namespace, $original = '');

// 注册自动加载机制
Loader::register($autoload = '');

// 注册composer自动加载
Loader::registerComposerLoader();

/**
 * 导入所需的类库 同java的Import 本函数有缓存功能
 * @param string $class   类库命名空间字符串
 * @param string $baseUrl 起始路径
 * @param string $ext     导入的文件扩展名
 * @return boolean
 */
Loader::import($class, $baseUrl = '', $ext = EXT);

/**
 * 实例化(分层)模型
 * @param string $name         Model名称
 * @param string $layer        业务层名称
 * @param bool   $appendSuffix 是否添加类名后缀
 * @param string $common       公共模块名
 * @return Object
 * @throws ClassNotFoundException
 */
Loader::model($name = '', $layer = 'model', $appendSuffix = false, $common = 'common');

/**
 * 实例化(分层)控制器 格式:[模块名/]控制器名
 * @param string $name         资源地址
 * @param string $layer        控制层名称
 * @param bool   $appendSuffix 是否添加类名后缀
 * @param string $empty        空控制器名称
 * @return Object|false
 * @throws ClassNotFoundException
 */
Loader::controller($name, $layer = 'controller', $appendSuffix = false, $empty = '');

/**
 * 实例化验证类 格式:[模块名/]验证器名
 * @param string $name         资源地址
 * @param string $layer        验证层名称
 * @param bool   $appendSuffix 是否添加类名后缀
 * @param string $common       公共模块名
 * @return Object|false
 * @throws ClassNotFoundException
 */
Loader::validate($name = '', $layer = 'validate', $appendSuffix = false, $common = 'common');

/**
 * 数据库初始化 并取得数据库类实例
 * @param mixed         $config 数据库配置
 * @param bool|string   $name 连接标识 true 强制重新连接
 * @return \think\db\Connection
 */
Loader::db($config = [], $name = false);

/**
 * 远程调用模块的操作方法 参数格式 [模块/控制器/]操作
 * @param string       $url          调用地址
 * @param string|array $vars         调用参数 支持字符串和数组
 * @param string       $layer        要调用的控制层名称
 * @param bool         $appendSuffix 是否添加类名后缀
 * @return mixed
 */
Loader::action($url, $vars = [], $layer = 'controller', $appendSuffix = false);

/**
 * 字符串命名风格转换
 * type 0 将Java风格转换为C的风格 1 将C风格转换为Java的风格
 * @param string  $name 字符串
 * @param integer $type 转换类型
 * @param bool    $ucfirst 首字母是否大写(驼峰规则)
 * @return string
 */
Loader::parseName($name, $type = 0, $ucfirst = true);

/**
 * 解析应用类的类名
 * @param string $module 模块名
 * @param string $layer  层名 controller model ...
 * @param string $name   类名
 * @param bool   $appendSuffix
 * @return string
 */
Loader::parseClass($module, $layer, $name, $appendSuffix = false);

/**
 * 初始化类的实例
 * @return void
 */
Loader::clearInstance();

/**
 * 作用范围隔离
 *
 * @param $file
 * @return mixed
 */
__include_file();

__require_file($file);复制代码
Log
// 日志初始化
Log::init($config = []);

// 获取日志信息
Log::getLog($type = '');

/**
 * 记录调试信息
 * @param mixed  $msg  调试信息
 * @param string $type 信息类型
 * @return void
 */
 Log::record($msg, $type = 'log');

// 清空日志信息
Log::clear();

// 当前日志记录的授权key
Log::key($key);

/**
 * 检查日志写入权限
 * @param array  $config  当前日志配置参数
 * @return bool
 */
Log::check($config);

// 保存调试信息
Log::save();

/**
 * 实时写入日志信息 并支持行为
 * @param mixed  $msg  调试信息
 * @param string $type 信息类型
 * @param bool   $force 是否强制写入
 * @return bool
 */
Log::write($msg, $type = 'log', $force = false);

// 静态调用
Log::__callStatic($method, $args);复制代码
Model
$model = new Model();

/**
 * 获取当前模型的数据库查询对象
 * @access public
 * @param bool $baseQuery 是否调用全局查询范围
 * @return Query
 */
$model->db($baseQuery = true);

$this->initialize();

/**
 * 设置数据对象值
 * @access public
 * @param mixed $data  数据或者属性名
 * @param mixed $value 值
 * @return $this
 */
$model->data($data, $value = null);

/**
 * 获取对象原始数据 如果不存在指定字段返回false
 * @access public
 * @param string $name 字段名 留空获取全部
 * @return mixed
 * @throws InvalidArgumentException
 */
 $model->getData($name = null);

 /**
 * 修改器 设置数据对象值
 * @access public
 * @param string $name  属性名
 * @param mixed  $value 属性值
 * @param array  $data  数据
 * @return $this
 */
$model->setAttr($name, $value, $data = []);

/**
 * 自动写入时间戳
 * @access public
 * @param string $name 时间戳字段
 * @return mixed
 */
$this->autoWriteTimestamp($name);

/**
 * 时间日期字段格式化处理
 * @access public
 * @param mixed $time      时间日期表达式
 * @param mixed $format    日期格式
 * @param bool  $timestamp 是否进行时间戳转换
 * @return mixed
 */
$this->formatDateTime($time, $format, $timestamp = false);

/**
 * 数据写入 类型转换
 * @access public
 * @param mixed        $value 值
 * @param string|array $type  要转换的类型
 * @return mixed
 */
$this->writeTransform($value, $type);

// 获取器 获取数据对象的值
$model->getAttr($name);

/**
 * 数据读取 类型转换
 * @access public
 * @param mixed        $value 值
 * @param string|array $type  要转换的类型
 * @return mixed
 */
$this->readTransform($value, $type);

/**
 * 设置需要追加的输出属性
 * @access public
 * @param array $append   属性列表
 * @param bool  $override 是否覆盖
 * @return $this
 */
$model->append($append = [], $override = false);

/**
 * 设置附加关联对象的属性
 * @access public
 * @param string       $relation 关联方法
 * @param string|array $append   追加属性名
 * @return $this
 * @throws Exception
 */
$model->appendRelationAttr($relation, $append);

/**
 * 设置需要隐藏的输出属性
 * @access public
 * @param array $hidden   属性列表
 * @param bool  $override 是否覆盖
 * @return $this
 */
$model->hidden($hidden = [], $override = false);

/**
 * 设置需要输出的属性
 * @access public
 * @param array $visible
 * @param bool  $override 是否覆盖
 * @return $this
 */
$model->visible($visible = [], $override = false);

/**
 * 解析隐藏及显示属性
 * @access protected
 * @param array $attrs  属性
 * @param array $result 结果集
 * @param bool  $visible
 * @return array
 */
$this->parseAttr($attrs, &$result, $visible = true);

/**
 * 转换子模型对象
 * @access protected
 * @param Model|ModelCollection $model
 * @param                  $visible
 * @param                  $hidden
 * @param                  $key
 * @return array
 */
$this->subToArray($model, $visible, $hidden, $key);

// 转换当前模型对象为数组
$model->toArray();

/**
 * 转换当前模型对象为JSON字符串
 * @access public
 * @param integer $options json参数
 * @return string
 */
$model->toJson($options = JSON_UNESCAPED_UNICODE);

/**
 * 转换当前模型数据集为数据集对象
 * @access public
 * @param array|\think\Collection $collection 数据集
 * @return \think\Collection
 */
$model->toCollection($collection);

/**
 * 关联数据一起更新
 * @access public
 * @param mixed $relation 关联
 * @return $this
 */
$model->together($relation);

/**
 * 获取模型对象的主键
 * @access public
 * @param string $name 模型名
 * @return mixed
 */
$model->getPk($name = '');

// 判断一个字段名是否为主键字段
$this->isPk($key);

/**
 * 保存当前数据对象
 * @access public
 * @param array  $data     数据
 * @param array  $where    更新条件
 * @param string $sequence 自增序列名
 * @return integer|false
 */
$model->save($data = [], $where = [], $sequence = null);

/**
 * 保存多个数据到当前数据对象
 * @access public
 * @param array   $dataSet 数据
 * @param boolean $replace 是否自动识别更新和写入
 * @return array|false
 * @throws \Exception
 */
$model->saveAll($dataSet, $replace = true);

/**
 * 设置允许写入的字段
 * @access public
 * @param mixed $field 允许写入的字段 如果为true只允许写入数据表字段
 * @return $this
 */
$model->allowField($field);

/**
 * 设置只读字段
 * @access public
 * @param mixed $field 只读字段
 * @return $this
 */
$model->readonly($field);

/**
 * 是否为更新数据
 * @access public
 * @param bool  $update
 * @param mixed $where
 * @return $this
 */
$model->isUpdate($update = true, $where = null);

/**
 * 数据自动完成
 * @access public
 * @param array $auto 要自动更新的字段列表
 * @return void
 */
$this->autoCompleteData($auto = []);

// 删除当前的记录
$model->delete();

/**
 * 设置自动完成的字段( 规则通过修改器定义)
 * @access public
 * @param array $fields 需要自动完成的字段
 * @return $this
 */
$model->auto($fields);

/**
 * 设置字段验证
 * @access public
 * @param array|string|bool $rule  验证规则 true表示自动读取验证器类
 * @param array             $msg   提示信息
 * @param bool              $batch 批量验证
 * @return $this
 */
$model->validate($rule = true, $msg = [], $batch = false);

/**
 * 设置验证失败后是否抛出异常
 * @access public
 * @param bool $fail 是否抛出异常
 * @return $this
 */
$model->validateFailException($fail = true);

/**
 * 自动验证数据
 * @access protected
 * @param array $data  验证数据
 * @param mixed $rule  验证规则
 * @param bool  $batch 批量验证
 * @return bool
 */
$this->validateData($data, $rule = null, $batch = null);

// 返回模型的错误信息
$this->getError();

/**
 * 注册回调方法
 * @access public
 * @param string   $event    事件名
 * @param callable $callback 回调方法
 * @param bool     $override 是否覆盖
 * @return void
 */
Model::event($event, $callback, $override = false);

/**
 * 触发事件
 * @access protected
 * @param string $event  事件名
 * @param mixed  $params 传入参数(引用)
 * @return bool
 */
 $this->trigger($event, &$params);

 /**
 * 写入数据
 * @access public
 * @param array      $data  数据数组
 * @param array|true $field 允许字段
 * @return $this
 */
Model::create($data = [], $field = null);

/**
 * 更新数据
 * @access public
 * @param array      $data  数据数组
 * @param array      $where 更新条件
 * @param array|true $field 允许字段
 * @return $this
 */
Model::update($data = [], $where = [], $field = null);

/**
 * 查找单条记录
 * @access public
 * @param mixed        $data  主键值或者查询条件(闭包)
 * @param array|string $with  关联预查询
 * @param bool         $cache 是否缓存
 * @return static
 * @throws exception\DbException
 */
Model::get($data = null, $with = [], $cache = false);

/**
 * 查找所有记录
 * @access public
 * @param mixed        $data  主键列表或者查询条件(闭包)
 * @param array|string $with  关联预查询
 * @param bool         $cache 是否缓存
 * @return static[]|false
 * @throws exception\DbException
 */
Model::all($data = null, $with = [], $cache = false);

/**
 * 分析查询表达式
 * @access public
 * @param mixed  $data  主键列表或者查询条件(闭包)
 * @param string $with  关联预查询
 * @param bool   $cache 是否缓存
 * @return Query
 */
Model::parseQuery(&$data, $with, $cache);

/**
 * 删除记录
 * @access public
 * @param mixed $data 主键列表 支持闭包查询条件
 * @return integer 成功删除的记录数
 */
Model::destroy($data);

/**
 * 命名范围
 * @access public
 * @param string|array|\Closure $name 命名范围名称 逗号分隔
 * @internal  mixed                 ...$params 参数调用
 * @return Model|Query
 */
Model::scope($name);

// 设置是否使用全局查询范围
Model::useGlobalScope($use);

/**
 * 根据关联条件查询当前模型
 * @access public
 * @param string  $relation 关联方法名
 * @param mixed   $operator 比较操作符
 * @param integer $count    个数
 * @param string  $id       关联表的统计字段
 * @return Relation|Query
 */
Model::has($relation, $operator = '>=', $count = 1, $id = '*');

/**
 * 根据关联条件查询当前模型
 * @access public
 * @param string $relation 关联方法名
 * @param mixed  $where    查询条件(数组或者闭包)
 * @return Relation|Query
 */
Model::hasWhere($relation, $where = []);

/**
 * 解析模型的完整命名空间
 * @access public
 * @param string $model 模型名(或者完整类名)
 * @return string
 */
 $this->parseModel($model);

 /**
 * 查询当前模型的关联数据
 * @access public
 * @param string|array $relations 关联名
 * @return $this
 */
$model->relationQuery($relations);

/**
 * 预载入关联查询 返回数据集
 * @access public
 * @param array  $resultSet 数据集
 * @param string $relation  关联名
 * @return array
 */
$model->eagerlyResultSet(&$resultSet, $relation);

/**
 * 预载入关联查询 返回模型对象
 * @access public
 * @param Model  $result   数据对象
 * @param string $relation 关联名
 * @return Model
 */
$model->eagerlyResult(&$result, $relation);

/**
 * 关联统计
 * @access public
 * @param Model        $result   数据对象
 * @param string|array $relation 关联名
 * @return void
 */
$model->relationCount(&$result, $relation);

/**
 * 获取模型的默认外键名
 * @access public
 * @param string $name 模型名
 * @return string
 */
$this->getForeignKey($name);

/**
 * HAS ONE 关联定义
 * @access public
 * @param string $model      模型名
 * @param string $foreignKey 关联外键
 * @param string $localKey   关联主键
 * @param array  $alias      别名定义(已经废弃)
 * @param string $joinType   JOIN类型
 * @return HasOne
 */
$model->hasOne($model, $foreignKey = '', $localKey = '', $alias = [], $joinType = 'INNER');

/**
 * BELONGS TO 关联定义
 * @access public
 * @param string $model      模型名
 * @param string $foreignKey 关联外键
 * @param string $localKey   关联主键
 * @param array  $alias      别名定义(已经废弃)
 * @param string $joinType   JOIN类型
 * @return BelongsTo
 */
$model->belongsTo($model, $foreignKey = '', $localKey = '', $alias = [], $joinType = 'INNER');

/**
 * HAS MANY 关联定义
 * @access public
 * @param string $model      模型名
 * @param string $foreignKey 关联外键
 * @param string $localKey   关联主键
 * @return HasMany
 */
$model->hasMany($model, $foreignKey = '', $localKey = '');

/**
 * HAS MANY 远程关联定义
 * @access public
 * @param string $model      模型名
 * @param string $through    中间模型名
 * @param string $foreignKey 关联外键
 * @param string $throughKey 关联外键
 * @param string $localKey   关联主键
 * @return HasManyThrough
 */
$model->hasManyThrough($model, $through, $foreignKey = '', $throughKey = '', $localKey = '');

/**
 * BELONGS TO MANY 关联定义
 * @access public
 * @param string $model      模型名
 * @param string $table      中间表名
 * @param string $foreignKey 关联外键
 * @param string $localKey   当前模型关联键
 * @return BelongsToMany
 */
$model->belongsToMany($model, $table = '', $foreignKey = '', $localKey = '');

/**
 * MORPH  MANY 关联定义
 * @access public
 * @param string       $model 模型名
 * @param string|array $morph 多态字段信息
 * @param string       $type  多态类型
 * @return MorphMany
 */
$model->morphMany($model, $morph = null, $type = '');

/**
 * MORPH TO 关联定义
 * @access public
 * @param string|array $morph 多态字段信息
 * @param array        $alias 多态别名定义
 * @return MorphTo
 */
$model->morphTo($morph = null, $alias = []);

$model->__call($method, $args);

Model::__callStatic($method, $params);

/**
 * 修改器 设置数据对象的值
 * @access public
 * @param string $name  名称
 * @param mixed  $value 值
 * @return void
 */
 $model->__set($name, $value);

/**
 * 获取器 获取数据对象的值
 * @access public
 * @param string $name 名称
 * @return mixed
 */
$model->__get($name);

// 检测数据对象的值
$model->__isset($name);

/**
 * 销毁数据对象的值
 * @access public
 * @param string $name 名称
 * @return void
 */
$model->__unset($name);

$model->__toString();

$model->jsonSerialize();

$model->offsetSet($name, $value);

$model->offsetExists($name);

$model->offsetUnset($name);

$model->offsetGet($name);

// 解序列化后处理
$model->__wakeup();

// 模型事件快捷方法
Model::beforeInsert($callback, $override = false);

Model::afterInsert($callback, $override = false);

Model::beforeUpdate($callback, $override = false);

Model::afterUpdate($callback, $override = false);

Model::beforeWrite($callback, $override = false);

Model::afterWrite($callback, $override = false);

Model::beforeDelete($callback, $override = false);

Model::afterDelete($callback, $override = false);
Process
/**
 * 构造方法
 * @param string         $commandline 指令
 * @param string|null    $cwd         工作目录
 * @param array|null     $env         环境变量
 * @param string|null    $input       输入
 * @param int|float|null $timeout     超时时间
 * @param array          $options     proc_open的选项
 * @throws \RuntimeException
 * @api
 */
$process = new Process($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = []);

// 停止
$process->__destruct();

// 克隆
$process->__clone();

/**
 * 运行指令
 * @param callback|null $callback
 * @return int
 */
$process->run($callback = null);

/**
 * 运行指令
 * @param callable|null $callback
 * @return self
 * @throws \RuntimeException
 * @throws ProcessFailedException
 */
$process->mustRun($callback = null);

/**
 * 启动进程并写到 STDIN 输入后返回。
 * @param callable|null $callback
 * @throws \RuntimeException
 * @throws \RuntimeException
 * @throws \LogicException
 */
 $process->start($callback = null);

 /**
 * 重启进程
 * @param callable|null $callback
 * @return Process
 * @throws \RuntimeException
 * @throws \RuntimeException
 */
$process->restart($callback = null);

/**
 * 等待要终止的进程
 * @param callable|null $callback
 * @return int
 */
$process->wait($callback = null);

/**
 * 获取PID
 * @return int|null
 * @throws \RuntimeException
 */
$process->getPid();

/**
 * 将一个 POSIX 信号发送到进程中
 * @param int $signal
 * @return Process
 */
$process->signal($signal);

// 禁用从底层过程获取输出和错误输出。
$process->disableOutput();

// 开启从底层过程获取输出和错误输出。
$process->enableOutput();

// 输出是否禁用
$process->isOutputDisabled();

/**
 * 获取当前的输出管道
 * @return string
 * @throws \LogicException
 * @throws \LogicException
 * @api
 */
$process->getOutput();

// 以增量方式返回的输出结果。
$process->getIncrementalOutput();

// 清空输出
$process->clearOutput();

// 返回当前的错误输出的过程 (STDERR)。
$process->getErrorOutput();

// 以增量方式返回 errorOutput
$process->getIncrementalErrorOutput();

// 清空 errorOutput
$process->clearErrorOutput();

/**
 * 获取退出码
 * @return null|int
 */
$process->getExitCode();

/**
 * 获取退出文本
 * @return null|string
 */
$process->getExitCodeText();

// 检查是否成功
$process->isSuccessful();

// 是否未捕获的信号已被终止子进程
$process->hasBeenSignaled();

// 返回导致子进程终止其执行的数。
$process->getTermSignal();

// 检查是否正在运行
$process->isRunning();

// 检查是否已开始
$process->isStarted();

// 检查是否已终止
$process->isTerminated();

// 获取当前的状态
$process->getStatus();

// 终止进程
$process->stop();

// 添加一行输出
$process->addOutput($line);

// 添加一行错误输出
$process->addErrorOutput($line);

// 获取被执行的指令
$process->getCommandLine();

// 设置指令
$process->setCommandLine($commandline);

// 获取超时时间
$process->getTimeout();

// 获取idle超时时间
$process->getIdleTimeout();

// 设置超时时间
$process->setTimeout($timeout);

// 设置idle超时时间
$process->setIdleTimeout($timeout);

// 设置TTY
$process->setTty($tty);

// 检查是否是tty模式
$process->isTty();

// 设置pty模式
$process->setPty($bool);

// 是否是pty模式
$process->isPty();

// 获取工作目录
$process->getWorkingDirectory();

// 设置工作目录
$process->setWorkingDirectory($cwd);

// 获取环境变量
$process->getEnv();

// 设置环境变量
$process->setEnv(array $env);

// 获取输入
$process->getInput();

// 设置输入
$process->setInput($input);

// 获取proc_open的选项
$process->getOptions();

// 设置proc_open的选项
$process->setOptions(array $options);

// 是否兼容windows
$process->getEnhanceWindowsCompatibility();

// 设置是否兼容windows
$process->setEnhanceWindowsCompatibility($enhance);

// 返回是否 sigchild 兼容模式激活
$process->getEnhanceSigchildCompatibility();

// 激活 sigchild 兼容性模式。
$process->setEnhanceSigchildCompatibility($enhance);

// 是否超时
$process->checkTimeout();

// 是否支持pty
Process::isPtySupported();

// 创建所需的 proc_open 的描述符
$this->getDescriptors();

// 建立 wait () 使用的回调。
$this->buildCallback($callback);

// 更新状态
$this->updateStatus($blocking);

// 是否开启 '--enable-sigchild'
$this->isSigchildEnabled();

// 验证是否超时
$this->validateTimeout($timeout);

// 读取pipes
$this->readPipes($blocking, $close);

// 捕获退出码
$this->captureExitCode();

/**
 * 关闭资源
 * @return int 退出码
 */
$this->close();

// 重置数据
$this->resetProcessData();

// 将一个 POSIX 信号发送到进程中。
$this->doSignal($signal, $throwException);

// 确保进程已经开启
$this->requireProcessIsStarted($functionName);

// 确保进程已经终止
$this->requireProcessIsTerminated($functionName);
Request
/**
 * Hook 方法注入
 * @access public
 * @param string|array  $method 方法名
 * @param mixed         $callback callable
 * @return void
 */
Request::hook($method, $callback = null);

// 初始化
Request::instance($options = []);

/**
 * 创建一个URL请求
 * @access public
 * @param string    $uri URL地址
 * @param string    $method 请求类型
 * @param array     $params 请求参数
 * @param array     $cookie
 * @param array     $files
 * @param array     $server
 * @param string    $content
 * @return \think\Request
 */
Request::create($uri, $method = 'GET', $params = [], $cookie = [], $files = [], $server = [], $content = null);

// 设置或获取当前包含协议的域名
$request = new Request();
$request->domain($domain = null);

/**
 * 设置或获取当前完整URL 包括QUERY_STRING
 * @access public
 * @param string|true $url URL地址 true 带域名获取
 * @return string
 */

/**
 * 设置或获取当前URL 不含QUERY_STRING
 * @access public
 * @param string $url URL地址
 * @return string
 */
$request->baseUrl($url = null);

/**
 * 设置或获取当前执行的文件 SCRIPT_NAME
 * @access public
 * @param string $file 当前执行的文件
 * @return string
 */
$request->baseFile($file = null);

/**
 * 设置或获取URL访问根地址
 * @access public
 * @param string $url URL地址
 * @return string
 */
$request->root($url = null);

// 获取当前请求URL的pathinfo信息(含URL后缀)
$request->pathinfo();

// 获取当前请求URL的pathinfo信息(不含URL后缀)
$request->path();

// 当前URL的访问后缀
$request->ext();

// 获取当前请求的时间
$request->time($float = false);

/**
 * 当前请求的资源类型
 * @access public
 * @return false|string
 */
$request->type();

/**
 * 设置资源类型
 * @access public
 * @param string|array  $type 资源类型名
 * @param string        $val 资源类型
 * @return void
 */
$request->mimeType($type, $val = '');

/**
 * 当前的请求类型
 * @access public
 * @param bool $method  true 获取原始请求类型
 * @return string
 */
$request->method($method = false);

// 是否为GET请求
$request->isGet();

// 是否为POST请求
$request->isPost();

// 是否为PUT请求
$request->isPut();

// 是否为DELTE请求
$request->isDelete();

// 是否为HEAD请求
$request->isHead();

// 是否为PATCH请求
$request->isPatch();

// 是否为OPTIONS请求
$request->isOptions();

// 是否为cli
$request->isCli();

// 是否为cgi
$request->isCgi();

/**
 * 获取获取当前请求的参数
 * @access public
 * @param string|array  $name 变量名
 * @param mixed         $default 默认值
 * @param string|array  $filter 过滤方法
 * @return mixed
 */
$request->param($name = '', $default = null, $filter = '');

/**
 * 设置获取获取路由参数
 * @access public
 * @param string|array  $name 变量名
 * @param mixed         $default 默认值
 * @param string|array  $filter 过滤方法
 * @return mixed
 */
$request->route($name = '', $default = null, $filter = '');

/**
 * 设置获取获取GET参数
 * @access public
 * @param string|array  $name 变量名
 * @param mixed         $default 默认值
 * @param string|array  $filter 过滤方法
 * @return mixed
 */
$request->get($name = '', $default = null, $filter = '');

/**
 * 设置获取获取POST参数
 * @access public
 * @param string        $name 变量名
 * @param mixed         $default 默认值
 * @param string|array  $filter 过滤方法
 * @return mixed
 */
$request->post($name = '', $default = null, $filter = '');

/**
 * 设置获取获取PUT参数
 * @access public
 * @param string|array      $name 变量名
 * @param mixed             $default 默认值
 * @param string|array      $filter 过滤方法
 * @return mixed
 */
$request->put($name = '', $default = null, $filter = '');

/**
 * 设置获取获取DELETE参数
 * @access public
 * @param string|array      $name 变量名
 * @param mixed             $default 默认值
 * @param string|array      $filter 过滤方法
 * @return mixed
 */
$request->delete($name = '', $default = null, $filter = '');

/**
 * 设置获取获取PATCH参数
 * @access public
 * @param string|array      $name 变量名
 * @param mixed             $default 默认值
 * @param string|array      $filter 过滤方法
 * @return mixed
 */
$Req


/**
 * 获取request变量
 * @param string        $name 数据名称
 * @param string        $default 默认值
 * @param string|array  $filter 过滤方法
 * @return mixed
 */
$request->request($name = '', $default = null, $filter = '');

/**
 * 获取session数据
 * @access public
 * @param string|array  $name 数据名称
 * @param string        $default 默认值
 * @param string|array  $filter 过滤方法
 * @return mixed
 */
$request->session($name = '', $default = null, $filter = '');


/**
 * 获取cookie参数
 * @access public
 * @param string|array  $name 数据名称
 * @param string        $default 默认值
 * @param string|array  $filter 过滤方法
 * @return mixed
 */
$request->cookie($name = '', $default = null, $filter = '');

/**
 * 获取server参数
 * @access public
 * @param string|array  $name 数据名称
 * @param string        $default 默认值
 * @param string|array  $filter 过滤方法
 * @return mixed
 */
$request->server($name = '', $default = null, $filter = '');

/**
 * 获取上传的文件信息
 * @access public
 * @param string|array $name 名称
 * @return null|array|\think\File
 */
$request->file($name = '');

/**
 * 获取环境变量
 * @param string|array  $name 数据名称
 * @param string        $default 默认值
 * @param string|array  $filter 过滤方法
 * @return mixed
 */
$request->env($name = '', $default = null, $filter = '');

/**
 * 设置或者获取当前的Header
 * @access public
 * @param string|array  $name header名称
 * @param string        $default 默认值
 * @return string
 */
$request->header($name = '', $default = null);

/**
 * 获取变量 支持过滤和默认值
 * @param array         $data 数据源
 * @param string|false  $name 字段名
 * @param mixed         $default 默认值
 * @param string|array  $filter 过滤函数
 * @return mixed
 */
 $request->input($data = [], $name = '', $default = null, $filter = '');

 /**
 * 设置或获取当前的过滤规则
 * @param mixed $filter 过滤规则
 * @return mixed
 */
$request->filter($filter = null);

/**
 * 递归过滤给定的值
 * @param mixed     $value 键值
 * @param mixed     $key 键名
 * @param array     $filters 过滤方法+默认值
 * @return mixed
 */
 $this->filterValue(&$value, $key, $filters);

 // 过滤表单中的表达式
 $request->filterExp(&$value);

 /**
 * 强制类型转换
 * @param string $data
 * @param string $type
 * @return mixed
 */
$this->typeCast(&$data, $type);

/**
 * 是否存在某个请求参数
 * @access public
 * @param string    $name 变量名
 * @param string    $type 变量类型
 * @param bool      $checkEmpty 是否检测空值
 * @return mixed
 */
$request->has($name, $type = 'param', $checkEmpty = false);

/**
 * 获取指定的参数
 * @access public
 * @param string|array  $name 变量名
 * @param string        $type 变量类型
 * @return mixed
 */
$request->only($name, $type = 'param');

/**
 * 排除指定参数获取
 * @access public
 * @param string|array  $name 变量名
 * @param string        $type 变量类型
 * @return mixed
 */
$request->except($name, $type = 'param');

// 当前是否ssl
$request->isSsl();

/**
 * 当前是否Ajax请求
 * @access public
 * @param bool $ajax  true 获取原始ajax请求
 * @return bool
 */
$request->isAjax($ajax = false);

/**
 * 当前是否Pjax请求
 * @access public
 * @param bool $pjax  true 获取原始pjax请求
 * @return bool
 */
$request->isPjax($pjax = false);

/**
 * 获取客户端IP地址
 * @param integer   $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
 * @param boolean   $adv 是否进行高级模式获取(有可能被伪装)
 * @return mixed
 */
$requet->ip($type = 0, $adv = false);

// 检测是否使用手机访问
$request->isMobile();

// 当前URL地址中的scheme参数
$request->scheme();

// 当前请求URL地址中的query参数
$request->query();

// 当前请求的host
$request->host();

// 当前请求URL地址中的port参数
$request->port();

// 当前请求 SERVER_PROTOCOL
$request->protocol();

// 当前请求 REMOTE_PORT
$request->remotePort();

// 当前请求 HTTP_CONTENT_TYPE
$request->contentType();

// 获取当前请求的路由信息
$request->routeInfo($route = []);

/**
 * 设置或者获取当前请求的调度信息
 * @access public
 * @param array  $dispatch 调度信息
 * @return array
 */
$request->dispatch($dispatch = null);

/**
 * 设置或者获取当前的模块名
 * @access public
 * @param string $module 模块名
 * @return string|Request
 */
$request->module($module = null);

// 设置或者获取当前的控制器名
$request->controller($controller = null);

// 设置或者获取当前的操作名
$request->action($action = null);

// 设置或者获取当前的语言
$request->langset($lang = null);

// 设置或者获取当前请求的content
$request->getContent();

// 获取当前请求的php://input
$request->getInput();

/**
 * 生成请求令牌
 * @access public
 * @param string $name 令牌名称
 * @param mixed  $type 令牌生成方法
 * @return string
 */
$request->token($name = '__token__', $type = 'md5');

/**
 * 设置当前地址的请求缓存
 * @access public
 * @param string $key 缓存标识,支持变量规则 ,例如 item/:name/:id
 * @param mixed  $expire 缓存有效期
 * @param array  $except 缓存排除
 * @return void
 */
$request->cache($key, $expire = null, $except = []);

// 读取请求缓存设置
$request->getCache();

/**
 * 设置当前请求绑定的对象实例
 * @access public
 * @param string $name 绑定的对象标识
 * @param mixed  $obj 绑定的对象实例
 * @return mixed
 */
$request->bind($name, $obj = null);
Response
/**
 * 构造函数
 * @access   public
 * @param mixed $data    输出数据
 * @param int   $code
 * @param array $header
 * @param array $options 输出参数
 */
$response = new Response($data = '', $code = 200, array $header = [], $options = []);

/**
 * 创建Response对象
 * @access public
 * @param mixed  $data    输出数据
 * @param string $type    输出类型
 * @param int    $code
 * @param array  $header
 * @param array  $options 输出参数
 * @return Response|JsonResponse|ViewResponse|XmlResponse|RedirectResponse|JsonpResponse
 */
Response::create($data = '', $type = '', $code = 200, array $header = [], $options = []);

/**
 * 发送数据到客户端
 * @access public
 * @return mixed
 * @throws \InvalidArgumentException
 */
$response->send();

/**
 * 处理数据
 * @access protected
 * @param mixed $data 要处理的数据
 * @return mixed
 */
$this->output($data);

/**
 * 输出的参数
 * @access public
 * @param mixed $options 输出参数
 * @return $this
 */
$response->options($options = []);

/**
 * 输出数据设置
 * @access public
 * @param mixed $data 输出数据
 * @return $this
 */
$response->data($data);

/**
 * 设置响应头
 * @access public
 * @param string|array $name  参数名
 * @param string       $value 参数值
 * @return $this
 */
$response->header($name, $value = null);

/**
 * 设置页面输出内容
 * @param $content
 * @return $this
 */
$response->content($content);

/**
 * 发送HTTP状态
 * @param integer $code 状态码
 * @return $this
 */
$response->code($code);

/**
 * LastModified
 * @param string $time
 * @return $this
 */
$response->lastModified($time);

/**
 * Expires
 * @param string $time
 * @return $this
 */
$response->expires($time);

/**
 * ETag
 * @param string $eTag
 * @return $this
 */
$response->eTag($eTag);

/**
 * 页面缓存控制
 * @param string $cache 状态码
 * @return $this
 */
$response->cacheControl($cache);

/**
 * 页面输出类型
 * @param string $contentType 输出类型
 * @param string $charset     输出编码
 * @return $this
 */
$response->contentType($contentType, $charset = 'utf-8');

/**
 * 获取头部信息
 * @param string $name 头部名称
 * @return mixed
 */
$response->getHeader($name = '');

/**
 * 获取原始数据
 * @return mixed
 */
$response->getData();

/**
 * 获取输出数据
 * @return mixed
 */
$response->getContent();

/**
 * 获取状态码
 * @return integer
 */
$response->getCode();
Route
/**
 * 注册变量规则
 * @access public
 * @param string|array  $name 变量名
 * @param string        $rule 变量规则
 * @return void
 */
Route::pattern($name = null, $rule = '');

/**
 * 注册子域名部署规则
 * @access public
 * @param string|array  $domain 子域名
 * @param mixed         $rule 路由规则
 * @param array         $option 路由参数
 * @param array         $pattern 变量规则
 * @return void
 */
Route::domain($domain, $rule = '', $option = [], $pattern = []);

self::setDomain($domain);

/**
 * 设置路由绑定
 * @access public
 * @param mixed     $bind 绑定信息
 * @param string    $type 绑定类型 默认为module 支持 namespace class controller
 * @return mixed
 */
Route::bind($bind, $type = 'module');

/**
 * 设置或者获取路由标识
 * @access public
 * @param string|array     $name 路由命名标识 数组表示批量设置
 * @param array            $value 路由地址及变量信息
 * @return array
 */
Route:;name($name = '', $value = null);

/**
 * 读取路由绑定
 * @access public
 * @param string    $type 绑定类型
 * @return mixed
 */
Route::getBind($type);

/**
 * 导入配置文件的路由规则
 * @access public
 * @param array     $rule 路由规则
 * @param string    $type 请求类型
 * @return void
 */
Route::import(array $rule, $type = '*');

// 批量注册路由
self::registerRules($rules, $type = '*');

/**
 * 注册路由规则
 * @access public
 * @param string    $rule 路由规则
 * @param string    $route 路由地址
 * @param string    $type 请求类型
 * @param array     $option 路由参数
 * @param array     $pattern 变量规则
 * @return void
 */
self::rule($rule, $route = '', $type = '*', $option = [], $pattern = []);

/**
 * 设置路由规则
 * @access public
 * @param string    $rule 路由规则
 * @param string    $route 路由地址
 * @param string    $type 请求类型
 * @param array     $option 路由参数
 * @param array     $pattern 变量规则
 * @param string    $group 所属分组
 * @return void
 */
self::setRule($rule, $route, $type = '*', $option = [], $pattern = [], $group = '');

/**
 * 设置当前执行的参数信息
 * @access public
 * @param array    $options 参数信息
 * @return mixed
 */
self::setOption($options = []);

/**
 * 获取当前执行的所有参数信息
 * @access public
 * @return array
 */
Route::getOption();

/**
 * 获取当前的分组信息
 * @access public
 * @param string    $type 分组信息名称 name option pattern
 * @return mixed
 */
Route::getGroup($type);

/**
 * 设置当前的路由分组
 * @access public
 * @param string    $name 分组名称
 * @param array     $option 分组路由参数
 * @param array     $pattern 分组变量规则
 * @return void
 */
Route::setGroup($name, $option = [], $pattern = []);

/**
 * 注册路由分组
 * @access public
 * @param string|array      $name 分组名称或者参数
 * @param array|\Closure    $routes 路由地址
 * @param array             $option 路由参数
 * @param array             $pattern 变量规则
 * @return void
 */
Route::group($name, $routes, $option = [], $pattern = []);

/**
 * 注册路由
 * @access public
 * @param string    $rule 路由规则
 * @param string    $route 路由地址
 * @param array     $option 路由参数
 * @param array     $pattern 变量规则
 * @return void
 */
Route::any($rule, $route = '', $option = [], $pattern = []);

/**
 * 注册GET路由
 * @access public
 * @param string    $rule 路由规则
 * @param string    $route 路由地址
 * @param array     $option 路由参数
 * @param array     $pattern 变量规则
 * @return void
 */
Route::get($rule, $route = '', $option = [], $pattern = []);

/**
 * 注册POST路由
 * @access public
 * @param string    $rule 路由规则
 * @param string    $route 路由地址
 * @param array     $option 路由参数
 * @param array     $pattern 变量规则
 * @return void
 */
Route::post($rule, $route = '', $option = [], $pattern = []);

/**
 * 注册PUT路由
 * @access public
 * @param string    $rule 路由规则
 * @param string    $route 路由地址
 * @param array     $option 路由参数
 * @param array     $pattern 变量规则
 * @return void
 */
Route::put($rule, $route = '', $option = [], $pattern = []);

/**
 * 注册DELETE路由
 * @access public
 * @param string    $rule 路由规则
 * @param string    $route 路由地址
 * @param array     $option 路由参数
 * @param array     $pattern 变量规则
 * @return void
 */
Route::delete($rule, $route = '', $option = [], $pattern = []);

/**
 * 注册PATCH路由
 * @access public
 * @param string    $rule 路由规则
 * @param string    $route 路由地址
 * @param array     $option 路由参数
 * @param array     $pattern 变量规则
 * @return void
 */
Route::patch($rule, $route = '', $option = [], $pattern = []);

/**
 * 注册资源路由
 * @access public
 * @param string    $rule 路由规则
 * @param string    $route 路由地址
 * @param array     $option 路由参数
 * @param array     $pattern 变量规则
 * @return void
 */
Route::resource($rule, $route = '', $option = [], $pattern = []);

/**
 * 注册控制器路由 操作方法对应不同的请求后缀
 * @access public
 * @param string    $rule 路由规则
 * @param string    $route 路由地址
 * @param array     $option 路由参数
 * @param array     $pattern 变量规则
 * @return void
 */
Route::controller($rule, $route = '', $option = [], $pattern = []);

/**
 * 注册别名路由
 * @access public
 * @param string|array  $rule 路由别名
 * @param string        $route 路由地址
 * @param array         $option 路由参数
 * @return void
 */
Route::alias($rule = null, $route = '', $option = []);

/**
 * 设置不同请求类型下面的方法前缀
 * @access public
 * @param string    $method 请求类型
 * @param string    $prefix 类型前缀
 * @return void
 */
Route::setMethodPrefix($method, $prefix = '');

/**
 * rest方法定义和修改
 * @access public
 * @param string        $name 方法名称
 * @param array|bool    $resource 资源
 * @return void
 */
Route::rest($name, $resource = []);

/**
 * 注册未匹配路由规则后的处理
 * @access public
 * @param string    $route 路由地址
 * @param string    $method 请求类型
 * @param array     $option 路由参数
 * @return void
 */
Route::miss($route, $method = '*', $option = []);

/**
 * 注册一个自动解析的URL路由
 * @access public
 * @param string    $route 路由地址
 * @return void
 */
Route::function auto($route);

/**
 * 获取或者批量设置路由定义
 * @access public
 * @param mixed $rules 请求类型或者路由定义数组
 * @return array
 */
Route::rules($rules = '');

/**
 * 检测子域名部署
 * @access public
 * @param Request   $request Request请求对象
 * @param array     $currentRules 当前路由规则
 * @param string    $method 请求类型
 * @return void
 */
Route::checkDomain($request, &$currentRules, $method = 'get');

/**
 * 检测URL路由
 * @access public
 * @param Request   $request Request请求对象
 * @param string    $url URL地址
 * @param string    $depr URL分隔符
 * @param bool      $checkDomain 是否检测域名规则
 * @return false|array
 */
Route::check($request, $url, $depr = '/', $checkDomain = false);

self::getRouteExpress($key);

/**
 * 检测路由规则
 * @access private
 * @param Request   $request
 * @param array     $rules 路由规则
 * @param string    $url URL地址
 * @param string    $depr URL分割符
 * @param string    $group 路由分组名
 * @param array     $options 路由参数(分组)
 * @return mixed
 */
self::checkRoute($request, $rules, $url, $depr = '/', $group = '', $options = []);

/**
 * 检测路由别名
 * @access private
 * @param Request   $request
 * @param string    $url URL地址
 * @param string    $depr URL分隔符
 * @return mixed
 */
self::checkRouteAlias($request, $url, $depr);

/**
 * 检测URL绑定
 * @access private
 * @param string    $url URL地址
 * @param array     $rules 路由规则
 * @param string    $depr URL分隔符
 * @return mixed
 */
self::checkUrlBind(&$url, &$rules, $depr = '/');

/**
 * 绑定到类
 * @access public
 * @param string    $url URL地址
 * @param string    $class 类名(带命名空间)
 * @param string    $depr URL分隔符
 * @return array
 */
Route::bindToClass($url, $class, $depr = '/');

/**
 * 绑定到命名空间
 * @access public
 * @param string    $url URL地址
 * @param string    $namespace 命名空间
 * @param string    $depr URL分隔符
 * @return array
 */
Route::bindToNamespace($url, $namespace, $depr = '/');

/**
 * 绑定到控制器类
 * @access public
 * @param string    $url URL地址
 * @param string    $controller 控制器名 (支持带模块名 index/user )
 * @param string    $depr URL分隔符
 * @return array
 */
Route::bindToController($url, $controller, $depr = '/');

/**
 * 绑定到模块/控制器
 * @access public
 * @param string    $url URL地址
 * @param string    $controller 控制器类名(带命名空间)
 * @param string    $depr URL分隔符
 * @return array
 */
Route::bindToModule($url, $controller, $depr = '/');

/**
 * 路由参数有效性检查
 * @access private
 * @param array     $option 路由参数
 * @param Request   $request Request对象
 * @return bool
 */
self::checkOption($option, $request);

/**
 * 检测路由规则
 * @access private
 * @param string    $rule 路由规则
 * @param string    $route 路由地址
 * @param string    $url URL地址
 * @param array     $pattern 变量规则
 * @param array     $option 路由参数
 * @param string    $depr URL分隔符(全局)
 * @return array|false
 */
self::checkRule($rule, $route, $url, $pattern, $option, $depr);

/**
 * 解析模块的URL地址 [模块/控制器/操作?]参数1=值1&参数2=值2...
 * @access public
 * @param string    $url URL地址
 * @param string    $depr URL分隔符
 * @param bool      $autoSearch 是否自动深度搜索控制器
 * @return array
 */
Route::parseUrl($url, $depr = '/', $autoSearch = false);

/**
 * 解析URL的pathinfo参数和变量
 * @access private
 * @param string    $url URL地址
 * @return array
 */
self::parseUrlPath($url);

/**
 * 检测URL和规则路由是否匹配
 * @access private
 * @param string    $url URL地址
 * @param string    $rule 路由规则
 * @param array     $pattern 变量规则
 * @return array|false
 */
self::match($url, $rule, $pattern);

/**
 * 解析规则路由
 * @access private
 * @param string    $rule 路由规则
 * @param string    $route 路由地址
 * @param string    $pathinfo URL地址
 * @param array     $option 路由参数
 * @param array     $matches 匹配的变量
 * @return array
 */
self::parseRule($rule, $route, $pathinfo, $option = [], $matches = []);

/**
 * 解析URL地址为 模块/控制器/操作
 * @access private
 * @param string    $url URL地址
 * @return array
 */
self::parseModule($url);

/**
 * 解析URL地址中的参数Request对象
 * @access private
 * @param string    $rule 路由规则
 * @param array     $var 变量
 * @return void
 */
self::parseUrlParams($url, &$var = []);

// 分析路由规则中的变量
self::parseVar($rule);
Session
// 设置或者获取session作用域(前缀)
Session::prefix($prefix = '');

/**
 * session初始化
 * @param array $config
 * @return void
 * @throws \think\Exception
 */
Session::init(array $config = []);

// session自动启动或者初始化
Session::boot();

/**
 * session设置
 * @param string        $name session名称
 * @param mixed         $value session值
 * @param string|null   $prefix 作用域(前缀)
 * @return void
 */
Session::set($name, $value = '', $prefix = null);

/**
 * session获取
 * @param string        $name session名称
 * @param string|null   $prefix 作用域(前缀)
 * @return mixed
 */
Session::get($name = '', $prefix = null);

/**
 * session获取并删除
 * @param string        $name session名称
 * @param string|null   $prefix 作用域(前缀)
 * @return mixed
 */
Session::pull($name, $prefix = null);

/**
 * session设置 下一次请求有效
 * @param string        $name session名称
 * @param mixed         $value session值
 * @param string|null   $prefix 作用域(前缀)
 * @return void
 */
Session::flash($name, $value);

// 清空当前请求的session数据
Session::function flush();

/**
 * 删除session数据
 * @param string|array  $name session名称
 * @param string|null   $prefix 作用域(前缀)
 * @return void
 */
Session::delete($name, $prefix = null);

/**
 * 清空session数据
 * @param string|null   $prefix 作用域(前缀)
 * @return void
 */
Session::clear($prefix = null);

/**
 * 判断session数据
 * @param string        $name session名称
 * @param string|null   $prefix
 * @return bool
 */
Session::has($name, $prefix = null);

/**
 * 添加数据到一个session数组
 * @param  string  $key
 * @param  mixed   $value
 * @return void
 */
Session::push($key, $value);

/**
 * 启动session
 * @return void
 */
Session::start();

/**
 * 销毁session
 * @return void
 */
Session::destroy();

/**
 * 重新生成session_id
 * @param bool $delete 是否删除关联会话文件
 * @return void
 */
Session::regenerate($delete = false);

/**
 * 暂停session
 * @return void
 */
Session::pause();
Template
// 构造函数
$template = new Template(array $config = []);


/**
 * 字符串替换 避免正则混淆
 * @access private
 * @param string $str
 * @return string
 */
$this->stripPreg($str);

/**
 * 模板变量赋值
 * @access public
 * @param mixed $name
 * @param mixed $value
 * @return void
 */
$template->assign($name, $value = '');

/**
 * 模板引擎参数赋值
 * @access public
 * @param mixed $name
 * @param mixed $value
 */
$template->__set($name, $value);

/**
 * 模板引擎配置项
 * @access public
 * @param array|string $config
 * @return void|array
 */
$template->config($config);

/**
 * 模板变量获取
 * @access public
 * @param  string $name 变量名
 * @return mixed
 */
$template->get($name = '');

/**
 * 渲染模板文件
 * @access public
 * @param string    $template 模板文件
 * @param array     $vars 模板变量
 * @param array     $config 模板参数
 * @return void
 */
$template->fetch($template, $vars = [], $config = []);

/**
 * 渲染模板内容
 * @access public
 * @param string    $content 模板内容
 * @param array     $vars 模板变量
 * @param array     $config 模板参数
 * @return void
 */
$template->display($content, $vars = [], $config = []);

/**
 * 设置布局
 * @access public
 * @param mixed     $name 布局模板名称 false 则关闭布局
 * @param string    $replace 布局模板内容替换标识
 * @return object
 */
$template->layout($name, $replace = '');

/**
 * 检查编译缓存是否有效
 * 如果无效则需要重新编译
 * @access private
 * @param string $cacheFile 缓存文件名
 * @return boolean
 */
$this->checkCache($cacheFile);

/**
 * 检查编译缓存是否存在
 * @access public
 * @param string $cacheId 缓存的id
 * @return boolean
 */
$template->isCache($cacheId);

/**
 * 编译模板文件内容
 * @access private
 * @param string    $content 模板内容
 * @param string    $cacheFile 缓存文件名
 * @return void
 */
$this->compiler(&$content, $cacheFile);

/**
 * 模板解析入口
 * 支持普通标签和TagLib解析 支持自定义标签库
 * @access public
 * @param string $content 要解析的模板内容
 * @return void
 */
$template->parse(&$content);

/**
 * 检查PHP语法
 * @access private
 * @param string $content 要解析的模板内容
 * @return void
 * @throws \think\Exception
 */
$this->parsePhp(&$content);

/**
 * 解析模板中的布局标签
 * @access private
 * @param string $content 要解析的模板内容
 * @return void
 */
$this->parseLayout(&$content);

/**
 * 解析模板中的include标签
 * @access private
 * @param  string $content 要解析的模板内容
 * @return void
 */
$this->parseInclude(&$content);

/**
 * 解析模板中的extend标签
 * @access private
 * @param  string $content 要解析的模板内容
 * @return void
 */
$this->parseExtend(&$content);

/**
 * 替换页面中的literal标签
 * @access private
 * @param  string   $content 模板内容
 * @param  boolean  $restore 是否为还原
 * @return void
 */
$this->parseLiteral(&$content, $restore = false);

/**
 * 获取模板中的block标签
 * @access private
 * @param  string   $content 模板内容
 * @param  boolean  $sort 是否排序
 * @return array
 */
$this->parseBlock(&$content, $sort = false);

/**
 * 搜索模板页面中包含的TagLib库
 * 并返回列表
 * @access private
 * @param  string $content 模板内容
 * @return array|null
 */
$this->getIncludeTagLib(&$content);

/**
 * TagLib库解析
 * @access public
 * @param  string   $tagLib 要解析的标签库
 * @param  string   $content 要解析的模板内容
 * @param  boolean  $hide 是否隐藏标签库前缀
 * @return void
 */
$template->parseTagLib($tagLib, &$content, $hide = false);

/**
 * 分析标签属性
 * @access public
 * @param  string   $str 属性字符串
 * @param  string   $name 不为空时返回指定的属性名
 * @return array
 */
$template->parseAttr($str, $name = null);

/**
 * 模板标签解析
 * 格式: {TagName:args [|content] }
 * @access private
 * @param  string $content 要解析的模板内容
 * @return void
 */
$this->parseTag(&$content);

/**
 * 模板变量解析,支持使用函数
 * 格式: {$varname|function1|function2=arg1,arg2}
 * @access public
 * @param  string $varStr 变量数据
 * @return void
 */
$template->parseVar(&$varStr);

/**
 * 对模板中使用了函数的变量进行解析
 * 格式 {$varname|function1|function2=arg1,arg2}
 * @access public
 * @param  string $varStr 变量字符串
 * @return void
 */
$template->parseVarFunction(&$varStr);

/**
 * 特殊模板变量解析
 * 格式 以 $Think. 打头的变量属于特殊模板变量
 * @access public
 * @param  array $vars 变量数组
 * @return string
 */
$template->parseThinkVar($vars);

/**
 * 分析加载的模板文件并读取内容 支持多个模板文件读取
 * @access private
 * @param  string $templateName 模板文件名
 * @return string
 */
$this->parseTemplateName($templateName);

/**
 * 解析模板文件名
 * @access private
 * @param  string $template 文件名
 * @return string|false
 */
$this->parseTemplateFile($template);

/**
 * 按标签生成正则
 * @access private
 * @param  string $tagName 标签名
 * @return string
 */
$this->getRegex($tagName);
Url
/**
 * URL生成 支持路由反射
 * @param string            $url 路由地址
 * @param string|array      $vars 参数(支持数组和字符串)a=val&b=val2... ['a'=>'val1', 'b'=>'val2']
 * @param string|bool       $suffix 伪静态后缀,默认为true表示获取配置值
 * @param boolean|string    $domain 是否显示域名 或者直接传入域名
 * @return string
 */
Url::build($url = '', $vars = '', $suffix = true, $domain = false);

// 直接解析URL地址
self::parseUrl($url, &$domain);
{
    $request = Request::instance();
    if (0 === strpos($url, '/')) {
        // 直接作为路由地址解析
        $url = substr($url, 1);
    } elseif (false !== strpos($url, '\\')) {
        // 解析到类
        $url = ltrim(str_replace('\\', '/', $url), '/');
    } elseif (0 === strpos($url, '@')) {
        // 解析到控制器
        $url = substr($url, 1);
    } else {
        // 解析到 模块/控制器/操作
        $module  = $request->module();
        $domains = Route::rules('domain');
        if (true === $domain && 2 == substr_count($url, '/')) {
            $current = $request->host();
            $match   = [];
            $pos     = [];
            foreach ($domains as $key => $item) {
                if (isset($item['[bind]']) && 0 === strpos($url, $item['[bind]'][0])) {
                    $pos[$key] = strlen($item['[bind]'][0]) + 1;
                    $match[]   = $key;
                    $module    = '';
                }
            }
            if ($match) {
                $domain = current($match);
                foreach ($match as $item) {
                    if (0 === strpos($current, $item)) {
                        $domain = $item;
                    }
                }
                self::$bindCheck = true;
                $url             = substr($url, $pos[$domain]);
            }
        } elseif ($domain) {
            if (isset($domains[$domain]['[bind]'][0])) {
                $bindModule = $domains[$domain]['[bind]'][0];
                if ($bindModule && !in_array($bindModule[0], ['\\', '@'])) {
                    $module = '';
                }
            }
        }
        $module = $module ? $module . '/' : '';

        $controller = Loader::parseName($request->controller());
        if ('' == $url) {
            // 空字符串输出当前的 模块/控制器/操作
            $url = $module . $controller . '/' . $request->action();
        } else {
            $path       = explode('/', $url);
            $action     = Config::get('url_convert') ? strtolower(array_pop($path)) : array_pop($path);
            $controller = empty($path) ? $controller : (Config::get('url_convert') ? Loader::parseName(array_pop($path)) : array_pop($path));
            $module     = empty($path) ? $module : array_pop($path) . '/';
            $url        = $module . $controller . '/' . $action;
        }
    }
    return $url;
}

// 检测域名
self::parseDomain(&$url, $domain);
// 解析URL后缀
self::parseSuffix($suffix);

// 匹配路由地址
Url::function getRuleUrl($rule, &$vars = []);

// 指定当前生成URL地址的root
Url::function root($root);
Validate
/**
 * 构造函数
 * @access public
 * @param array $rules 验证规则
 * @param array $message 验证提示信息
 * @param array $field 验证字段描述信息
 */
$validate = new Validate(array $rules = [], $message = [], $field = []);

/**
 * 实例化验证
 * @access public
 * @param array     $rules 验证规则
 * @param array     $message 验证提示信息
 * @param array     $field 验证字段描述信息
 * @return Validate
 */
Validate::make($rules = [], $message = [], $field = []);

/**
 * 添加字段验证规则
 * @access protected
 * @param string|array  $name  字段名称或者规则数组
 * @param mixed         $rule  验证规则
 * @return Validate
 */
$validate->rule($name, $rule = '');

/**
 * 注册验证(类型)规则
 * @access public
 * @param string    $type  验证规则类型
 * @param mixed     $callback callback方法(或闭包)
 * @return void
 */
Validate::extend($type, $callback = null);

/**
 * 获取验证规则的默认提示信息
 * @access protected
 * @param string|array  $type  验证规则类型名称或者数组
 * @param string        $msg  验证提示信息
 * @return void
 */
Validate::setTypeMsg($type, $msg = null);

/**
 * 设置提示信息
 * @access public
 * @param string|array  $name  字段名称
 * @param string        $message 提示信息
 * @return Validate
 */
$validate->message($name, $message = '');

/**
 * 设置验证场景
 * @access public
 * @param string|array  $name  场景名或者场景设置数组
 * @param mixed         $fields 要验证的字段
 * @return Validate
 */
$validate->scene($name, $fields = null);

/**
 * 判断是否存在某个验证场景
 * @access public
 * @param string $name 场景名
 * @return bool
 */
$validate->hasScene($name);

/**
 * 设置批量验证
 * @access public
 * @param bool $batch  是否批量验证
 * @return Validate
 */
$validate->batch($batch = true);

/**
 * 数据自动验证
 * @access public
 * @param array     $data  数据
 * @param mixed     $rules  验证规则
 * @param string    $scene 验证场景
 * @return bool
 */
$validate->check($data, $rules = [], $scene = '');

/**
 * 验证单个字段规则
 * @access protected
 * @param string    $field  字段名
 * @param mixed     $value  字段值
 * @param mixed     $rules  验证规则
 * @param array     $data  数据
 * @param string    $title  字段描述
 * @param array     $msg  提示信息
 * @return mixed
 */
$this->checkItem($field, $value, $rules, $data, $title = '', $msg = []);

/**
 * 验证是否和某个字段的值一致
 * @access protected
 * @param mixed     $value 字段值
 * @param mixed     $rule  验证规则
 * @param array     $data  数据
 * @param string    $field 字段名
 * @return bool
 */
$this->confirm($value, $rule, $data, $field = '');

/**
 * 验证是否和某个字段的值是否不同
 * @access protected
 * @param mixed $value 字段值
 * @param mixed $rule  验证规则
 * @param array $data  数据
 * @return bool
 */
$this->different($value, $rule, $data);

/**
 * 验证是否大于等于某个值
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->egt($value, $rule);

/**
 * 验证是否大于某个值
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->gt($value, $rule);

/**
 * 验证是否小于等于某个值
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->elt($value, $rule);

/**
 * 验证是否小于某个值
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->lt($value, $rule);

/**
 * 验证是否等于某个值
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->eq($value, $rule);

/**
 * 验证字段值是否为有效格式
 * @access protected
 * @param mixed     $value  字段值
 * @param string    $rule  验证规则
 * @param array     $data  验证数据
 * @return bool
 */
$this->is($value, $rule, $data = []);

// 判断图像类型
$this->getImageType($image);

/**
 * 验证是否为合格的域名或者IP 支持A,MX,NS,SOA,PTR,CNAME,AAAA,A6, SRV,NAPTR,TXT 或者 ANY类型
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->activeUrl($value, $rule);

/**
 * 验证是否有效IP
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则 ipv4 ipv6
 * @return bool
 */
$this->ip($value, $rule);

/**
 * 验证上传文件后缀
 * @access protected
 * @param mixed     $file  上传文件
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->fileExt($file, $rule);

/**
 * 验证上传文件类型
 * @access protected
 * @param mixed     $file  上传文件
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->fileMime($file, $rule);

/**
 * 验证上传文件大小
 * @access protected
 * @param mixed     $file  上传文件
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->fileSize($file, $rule);

/**
 * 验证图片的宽高及类型
 * @access protected
 * @param mixed     $file  上传文件
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->image($file, $rule);

/**
 * 验证请求类型
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->method($value, $rule);

/**
 * 验证时间和日期是否符合指定格式
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->dateFormat($value, $rule);

/**
 * 验证是否唯一
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则 格式:数据表,字段名,排除ID,主键名
 * @param array     $data  数据
 * @param string    $field  验证字段名
 * @return bool
 */
$this->unique($value, $rule, $data, $field);

/**
 * 使用行为类验证
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @param array     $data  数据
 * @return mixed
 */
$this->behavior($value, $rule, $data);

/**
 * 使用filter_var方式验证
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->filter($value, $rule);

/**
 * 验证某个字段等于某个值的时候必须
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @param array     $data  数据
 * @return bool
 */
$this->requireIf($value, $rule, $data);

/**
 * 通过回调方法验证某个字段是否必须
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @param array     $data  数据
 * @return bool
 */
$this->requireCallback($value, $rule, $data);

/**
 * 验证某个字段有值的情况下必须
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @param array     $data  数据
 * @return bool
 */
$this->requireWith($value, $rule, $data);

/**
 * 验证是否在范围内
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->in($value, $rule);

/**
 * 验证是否不在某个范围
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->notIn($value, $rule);

/**
 * between验证数据
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->between($value, $rule);

/**
 * 使用notbetween验证数据
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->notBetween($value, $rule);

/**
 * 验证数据长度
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->length($value, $rule);

/**
 * 验证数据最大长度
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->max($value, $rule);

/**
 * 验证数据最小长度
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->min($value, $rule);

/**
 * 验证日期
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->after($value, $rule);

/**
 * 验证日期
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->before($value, $rule);

/**
 * 验证有效期
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @return bool
 */
$this->expire($value, $rule);

/**
 * 验证IP许可
 * @access protected
 * @param string    $value  字段值
 * @param mixed     $rule  验证规则
 * @return mixed
 */
$this->allowIp($value, $rule);

/**
 * 验证IP禁用
 * @access protected
 * @param string    $value  字段值
 * @param mixed     $rule  验证规则
 * @return mixed
 */
$this->denyIp($value, $rule);

/**
 * 使用正则验证数据
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则 正则规则或者预定义正则名
 * @return mixed
 */
$this->regex($value, $rule);

/**
 * 验证表单令牌
 * @access protected
 * @param mixed     $value  字段值
 * @param mixed     $rule  验证规则
 * @param array     $data  数据
 * @return bool
 */
$this->token($value, $rule, $data);

// 获取错误信息
$validate->getError();

/**
 * 获取数据值
 * @access protected
 * @param array     $data  数据
 * @param string    $key  数据标识 支持二维
 * @return mixed
 */
$this->getDataValue($data, $key);

/**
 * 获取验证规则的错误提示信息
 * @access protected
 * @param string    $attribute  字段英文名
 * @param string    $title  字段描述名
 * @param string    $type  验证规则名称
 * @param mixed     $rule  验证规则数据
 * @return string
 */
$this->getRuleMsg($attribute, $title, $type, $rule);

/**
 * 获取数据验证的场景
 * @access protected
 * @param string $scene  验证场景
 * @return array
 */
$this->getScene($scene = '');

Validate::__callStatic($method, $params);
View
/**
 * 构造函数
 * @access public
 * @param array $engine  模板引擎参数
 * @param array $replace  字符串替换参数
 */
$view = New View($engine = [], $replace = []);

/**
 * 初始化视图
 * @access public
 * @param array $engine  模板引擎参数
 * @param array $replace  字符串替换参数
 * @return object
 */
View::instance($engine = [], $replace = []);

/**
 * 模板变量静态赋值
 * @access public
 * @param mixed $name  变量名
 * @param mixed $value 变量值
 * @return void
 */
View::share($name, $value = '');

/**
 * 模板变量赋值
 * @access public
 * @param mixed $name  变量名
 * @param mixed $value 变量值
 * @return $this
 */
$view->assign($name, $value = '');

/**
 * 设置当前模板解析的引擎
 * @access public
 * @param array|string $options 引擎参数
 * @return $this
 */
$view->engine($options = []);

/**
 * 配置模板引擎
 * @access private
 * @param string|array  $name 参数名
 * @param mixed         $value 参数值
 * @return void
 */
$view->config($name, $value = null);

/**
 * 解析和获取模板内容 用于输出
 * @param string    $template 模板文件名或者内容
 * @param array     $vars     模板输出变量
 * @param array     $replace 替换内容
 * @param array     $config     模板参数
 * @param bool      $renderContent     是否渲染内容
 * @return string
 * @throws Exception
 */
$view->fetch($template = '', $vars = [], $replace = [], $config = [], $renderContent = false);

/**
 * 视图内容替换
 * @access public
 * @param string|array  $content 被替换内容(支持批量替换)
 * @param string        $replace    替换内容
 * @return $this
 */
$view->replace($content, $replace = '');

/**
 * 渲染内容输出
 * @access public
 * @param string $content 内容
 * @param array  $vars    模板输出变量
 * @param array  $replace 替换内容
 * @param array  $config     模板参数
 * @return mixed
 */
$view->display($content, $vars = [], $replace = [], $config = []);

/**
 * 模板变量赋值
 * @access public
 * @param string    $name  变量名
 * @param mixed     $value 变量值
 */
$view->__set($name, $value);

/**
 * 取得模板显示变量的值
 * @access protected
 * @param string $name 模板变量
 * @return mixed
 */
$view->__get($name);

/**
 * 检测模板变量是否设置
 * @access public
 * @param string $name 模板变量名
 * @return bool
 */
$view->__isset($name);