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,

  1. 使用自动加载

‘skip_plugin_mode_check’ => false,

  1. 跳过插件模式

‘handle_all_dev_error’ => true,

  1. 处理开发时期的错误

‘handle_all_exception’ => true,

  1. 处理所有异常

‘override_class’ => ‘Base\App’,

  1. 重新进入的切换的子类

‘override_class’=>’’,重要选项

  1. 如果这个选项的类存在,则在init()的时候会切换到这个类完成后续初始化,并返回这个类的实例。

基本配置

‘path’ => null,

  1. 基准目录,如果没设置,将设置为 $_SERVER['SCRIPT_FILENAME']的父级目录。

‘namespace’ => null,

  1. 基准命名空间,如果没设置,将设置为当前类的命名空间的上级命名空间,如MyProject\\System\\App => MyProject

‘path_namespace’ => null,

  1. 命名空间路径,如果设置了本值,将会使用自动加载, 基准目录是 path

‘is_debug’ => false,

  1. 调试模式, 用于 IsDebug() 方法。

‘platform’ => ‘’,

  1. 平台, 自定义字符,用于 Platform() 方法。

‘ext’ => [],

  1. 扩展

开关配置

‘use_flag_by_setting’ => true,

  1. 从设置文件中再次重载 is_debug platform ,对应的设置选项是 duckphp_is_debug ,和 duckphp_platform

‘use_super_global’ => true,

  1. 使用 `SuperGlobal` 类处理超全局变量,关闭以节约微乎其微的性能。

‘use_short_functions’ => true,

  1. 允许使用短函数,__h,__url, 等。

‘skip_404_handler’ => false,

  1. 不处理 404 ,用于配合其他框架使用。

‘skip_exception_check’ => false,

  1. 不在 Run 流程检查异常,把异常抛出外面,或许

错误处理配置

‘error_404’ => null, //‘_sys/error-404’,

  1. 404 View或者回调

‘error_500’ => null, //‘_sys/error-500’,

  1. 500 View或者回调

‘error_debug’ => null, //‘_sys/error-debug’,

  1. 404 View或者回调

公开方法

public static function RunQuickly(array $options=[], callable $after_init=null): bool

  1. 快速开始,init() 后接 $after_init() 然后 run();

public function init(array $options=[], object $context=null)

  1. 初始化

public function run(): bool

  1. 运行,如果404,返回false

public function clear(): void

  1. 不建议主动使用,用于清理现场。

public function beforeRun()

  1. 不建议主动使用,加载运行状态数据,比如当前 URL 等。

public function replaceDefaultRunHandler(callable $handler = null): void

  1. 不通过继承而是外挂替换默认的 Run 函数, 用于第三方接管。

重写方法

用于重写的方法默认都是空方法,预留用户功能。用于重写的方法都带有同名属性,可以用同名属性方式赋值

protected function onPrepare()

  1. 准备阶段,你可以在这里替换默认类

protected function onInit()

  1. 初始化完成

protected function onRun()

  1. 运行阶段。不建议重写 run ,而是在这里添加运行阶段处理

protected function onAfterRun()

  1. 运行完毕阶段执行的方法

流程相关方法

protected function checkOverride($options)

  1. init() 里检测重入类。

protected function initAfterOverride($options)

  1. 真正的 init 按顺序执行 initOptions, onPrepare,initDefaultComponentsinitExtentions,onInit

protected function initOptions($options = [])

  1. init() 中初始化选项

protected function reloadFlags(): void

  1. init() DefaultComponents() 中从设置读取调试标志和平台标志

protected function initExtentions(array $exts): void

  1. 初始化中,初始化扩展

protected function getDefaultProjectNameSpace($class)

  1. 辅助方法,用于在 init() 中设置 namespace.

protected function getDefaultProjectPath()

  1. 辅助方法,用于在 init() 中设置 path.

详解

Kernel 这个 Trait 一般不直接使用。一般直接用的是 DuckPhp\Core\App , 而直接的 DuckPhp\DuckPhp 类,则是把常见扩展加进去形成完善的框架。

流程说明

Kernel 大致分为两个阶段

init() 初始化阶段,和 run 阶段

run 阶段可重复调用

run() 详解