在深度折騰過兩者后,基于自己的使用痛點(diǎn),改善而來。
傳統(tǒng)的PHP框架笨重,workerman已經(jīng)很好的解決了
容器管理 現(xiàn)代開發(fā)中已經(jīng)必不可少了?;谌萜髯鲩_發(fā),后期可以對(duì)各種實(shí)現(xiàn)的無縫切換。
同時(shí)對(duì)于類也可以很好的解耦在使用workerman后 遇到的最多的問題,就是隱藏的bug,這并不是worker的問題。很多composer包都不適用于這種持久環(huán)境,這種問題及其隱秘,你不打印根本不可能知道。
.....
可以任意增改系統(tǒng)流程
(new App()) // 設(shè)置環(huán)境 ->setEnv('dev') // 初始化鏈 程序啟動(dòng)前的必備工作 講究順序 比如配置加載合并 ->appInit() // 啟動(dòng)鏈 程序可以做些運(yùn)行前的工作,比如注冊(cè)路由 注冊(cè)插件 webman的bootstraps可以在這里實(shí)現(xiàn) 內(nèi)置實(shí)現(xiàn)了thinkphp的services ->appBoot() // 運(yùn)行鏈 核心業(yè)務(wù)的運(yùn)行模塊,例如http-server 請(qǐng)求只會(huì)在這一層處理 ->appRun();
// 初始化器
private array $initializers = [
// 加載公共函數(shù)
LoadFunctions::class,
// 加載內(nèi)置函數(shù)
LoadBuiltinFunctions::class,
// 加載全局配置文件
LoadConfigFiles::class,
// 合并環(huán)境配置到全局配置
MergeEnvConfigs::class,
// 初始化應(yīng)用狀態(tài)
AppStatusInit::class
];
// 啟動(dòng)器
private array $bootstraps = [
//加載全局容器配置
LoadProviders::class,
// 加載事件配置
LoadEvents::class,
// 加載多語(yǔ)言
LoadLang::class
];
默認(rèn)的配置流程是 超全局配置(類似環(huán)境配置)->全局配置。系統(tǒng)會(huì)自動(dòng)覆蓋全局配置
debug=true
timezone=Asia/ShangHai
lang.default=zh-cn
cache.default=file
monitor.command=php bin.php http
session.default=redis
route.404_template=111
這也是我喜歡thinkphp的地方 能依賴注入就不想別的。
// 還可以這樣注入依賴
#[Autowired]
private Route $route;
// 獲取配置
#[GetConfig('route.root_path')]
private string $routePath;
相對(duì)注釋 屬性類更加優(yōu)雅,內(nèi)置的路由,控制器 服務(wù)注冊(cè)都是用屬性類實(shí)現(xiàn)的
#[GET] #[Middleware([Test::class])] public function index(): string { return 'index'; }
總體的中間件,事件,緩存,日志 等等 都和thinkphp webman一模一樣
不同的是全部采用了容器來管理
目前還有視圖沒有完成,路由和控制器還需要在使用中發(fā)現(xiàn)和修復(fù)問題。如果你閑著無聊,那就一起來玩玩吧倉(cāng)庫(kù)已經(jīng)上傳,歡迎大神指教。(我沒學(xué)過php硬上手的,遇到噴點(diǎn),輕點(diǎn)噴)
https://github.com/wasonCheung/pandaman
兄弟不錯(cuò)啊 支持