DuckPhp\Core\Kernel
简介
最核心的Trait,你通过 DuckPhp\DuckPhp 或 DuckPhp\Core\App 类来使用他。
引用
DuckPhp\Core\AutoLoader 自动加载 DuckPhp\Core\Configer 配置 DuckPhp\Core\ExceptionManager 异常处理 DuckPhp\Core\Route 路由 DuckPhp\Core\RuntimeState 运行时状态 DuckPhp\Core\View 视图 DuckPhp\Core\SuperGlobal 超全局变量 DuckPhp\Core\Logger 日志管理。
选项
use 开始的选项都是默认 true ,skip 开头的都是 false;
子类无法更改的选项
‘use_autoloader’ => true,
使用自动加载
‘skip_plugin_mode_check’ => false,
跳过插件模式
‘handle_all_dev_error’ => true,
处理开发时期的错误
‘handle_all_exception’ => true,
处理所有异常
‘override_class’ => ‘Base\App’,
重新进入的切换的子类
‘override_class’=>’’,重要选项
如果这个选项的类存在,则在init()的时候会切换到这个类完成后续初始化,并返回这个类的实例。
基本配置
‘path’ => null,
基准目录,如果没设置,将设置为 $_SERVER['SCRIPT_FILENAME']的父级目录。
‘namespace’ => null,
基准命名空间,如果没设置,将设置为当前类的命名空间的上级命名空间,如MyProject\\System\\App => MyProject
‘path_namespace’ => null,
命名空间路径,如果设置了本值,将会使用自动加载, 基准目录是 path。
‘is_debug’ => false,
调试模式, 用于 IsDebug() 方法。
‘platform’ => ‘’,
平台, 自定义字符,用于 Platform() 方法。
‘ext’ => [],
扩展
开关配置
‘use_flag_by_setting’ => true,
从设置文件中再次重载 is_debug 和 platform ,对应的设置选项是 duckphp_is_debug ,和 duckphp_platform
‘use_super_global’ => true,
使用 `SuperGlobal` 类处理超全局变量,关闭以节约微乎其微的性能。
‘use_short_functions’ => true,
允许使用短函数,__h,__url, 等。
‘skip_404_handler’ => false,
不处理 404 ,用于配合其他框架使用。
‘skip_exception_check’ => false,
不在 Run 流程检查异常,把异常抛出外面,或许
错误处理配置
‘error_404’ => null, //‘_sys/error-404’,
404 的View或者回调
‘error_500’ => null, //‘_sys/error-500’,
500 的View或者回调
‘error_debug’ => null, //‘_sys/error-debug’,
404 的View或者回调
公开方法
public static function RunQuickly(array $options=[], callable $after_init=null): bool
快速开始,init() 后接 $after_init() 然后 run();
public function init(array $options=[], object $context=null)
初始化
public function run(): bool
运行,如果404,返回false。
public function clear(): void
不建议主动使用,用于清理现场。
public function beforeRun()
不建议主动使用,加载运行状态数据,比如当前 URL 等。
public function replaceDefaultRunHandler(callable $handler = null): void
不通过继承而是外挂替换默认的 Run 函数, 用于第三方接管。
重写方法
用于重写的方法默认都是空方法,预留用户功能。用于重写的方法都带有同名属性,可以用同名属性方式赋值
protected function onPrepare()
准备阶段,你可以在这里替换默认类
protected function onInit()
初始化完成
protected function onRun()
运行阶段。不建议重写 run ,而是在这里添加运行阶段处理
protected function onAfterRun()
运行完毕阶段执行的方法
流程相关方法
protected function checkOverride($options)
在 init() 里检测重入类。
protected function initAfterOverride($options)
真正的 init 按顺序执行 initOptions, onPrepare,initDefaultComponents,initExtentions,onInit
protected function initOptions($options = [])
init() 中初始化选项
protected function reloadFlags(): void
init() 中 DefaultComponents() 中从设置读取调试标志和平台标志
protected function initExtentions(array $exts): void
初始化中,初始化扩展
protected function getDefaultProjectNameSpace($class)
辅助方法,用于在 init() 中设置 namespace.
protected function getDefaultProjectPath()
辅助方法,用于在 init() 中设置 path.
详解
Kernel 这个 Trait 一般不直接使用。一般直接用的是 DuckPhp\Core\App , 而直接的 DuckPhp\DuckPhp 类,则是把常见扩展加进去形成完善的框架。
流程说明
Kernel 大致分为两个阶段
init() 初始化阶段,和 run 阶段
run 阶段可重复调用