QueryPHP V1-beta.1 部分文件程式碼解耦,版本 PHP 7.3.2
經過 1 個月的開發,QueryPHP v1.0.0-beta.1 版本可以釋出了,這也是 beta 3 個版本的開始部分。這個版本的主要是程式碼解耦和效能提升,文件開發。
關於 QueryPHP
QueryPHP 是一款現代化的高效能 PHP 7 常駐框架,以工程師使用者體驗為歷史使命,讓每一個 PHP 應用都有一個好框架。
百分之百單元測試覆蓋直面 Bug 一劍封喉,基於 Zephir 實現框架常駐,依託 Swoole 生態實現業務常駐,此刻未來逐步漸進。 我們的願景是 USE LEEVEL WITH SWOOLE DO BETTER, 讓您的業務撐起更多的使用者服務。
更新日誌
- Facade 優化,不再繼承一個基礎的 Facade,不影響單元測試,並且減少了複雜度和呼叫鏈
- 函式惰性載入方案支援,將靜態類解耦為真正的函式,框架底層元件直接呼叫函式本身
- 文件更新,這次更新了 20 多篇文件
- 新增幾十例測試用例,框架測試用例終於突破 3000 大關,框架部分 3008 測試用例, 9835 斷言
- PHP 最低依賴版本從 PHP 7.1.3 修改 PHP 7.3.2,框架正在迭代距離使用者使用還有段時間,我們可以使用最新的特性
- 框架自帶的 composer 載入優化器支援輔助函式白名單
- QueryPHP 自身是一個包含基礎許可權的後臺系統,程式碼優化更符合領域驅動設計分層架構,引入工作流簡化流水賬程式碼
- 鎖定 doctrine/annotations ~1.6.0 和 zendframework/zend-diactoros ^2.1.1 減少相容性問題和修復使用者安裝報錯的問題
- 去掉檢視中 v8js 的支援,刪除基類 Facade, 刪除巨集擴充套件,簡化設計減少複雜度。
- 技術債務,框架底層大量的程式碼優化進行解耦,減少複雜減少技術債務
函式惰性載入
PHP 的函式式特性已經逐步被純物件所取代,函式庫很多時候被包裝為靜態類,很多時候其實不需要一個類,為此 QueryPHP 底層框架提供了全域性函式 fn 來實現了惰性載入。
<?php declare(strict_types=1); fn('Leevel\\Support\\Str\\rand_num', 5);
精簡框架自身助手函式庫
僅僅提供 4 個助手函式就完全滿足了系統的庫函式的載入使用。
https://github.com/hunzhiwange/framework/blob/master/src/Leevel/Leevel/functions.php
fn('Leevel\\Support\\Str\\rand_num', 5); hl('dump', 1, 2); app('request'); __('國際化');
例子函式
<?php declare(strict_types=1); namespace Leevel\Support\Str; /** * 隨機數字. * * @param int$length * @param string $charBox * * @return string */ function rand_num(int $length, ?string $charBox = null): string { if (!$length) { return ''; } if (null === $charBox) { $charBox = '0123456789'; } return rand_str($length, $charBox); } // @codeCoverageIgnoreStart if (!function_exists('Leevel\\Support\\Str\\rand_str')) { include __DIR__.'/rand_str.php'; } // @codeCoverageIgnoreEnd
Facade 優化
最開始採用的 Laravel 的繼承一個基礎的 Facade,方便單元測試,有一定效能損失。後來覺得在做單元測試只需要清空容器註冊的服務就可以所以優化了一版本。
<?php declare(strict_types=1); namespace Leevel\Encryption\Facade; use Leevel\Leevel\App; /** * 門面 encryption. * * @author Xiangmin Liu <[email protected]> * * @since 2017.06.10 * * @version 1.0 */ class Encryption { /** * call. * * @param string $method * @param array$args * * @return mixed */ public static function __callStatic(string $method, array $args) { return App::singletons() ->make('encryption') ->{$method}(...$args); } }
文件更新
系統新增了 20 個新的文件,後續會逐漸豐富起來。
https://www.queryphp.com/docs/
自動載入優化器
QueryPHP 實現了一套基於並且優化了 composer 的自動載入,並且遮蔽了助手函式的載入。
這次提供了白名單來讓你選擇部分函式的載入。
/** * --------------------------------------------------------------- * Composer * ---------------------------------------------------------------. * * 用於管理 PHP 依賴包 * 優化 composer 效能,提煉 composer 中的 autoload_static 中的我們關注的 psr4 名稱空間對映 * 我們 classmap 需要通過 `php leevel autoload` 生成,包含命令 `composer dump-autoload -o` * 對於助手函式需要自己引入 */ $autoloadLeevel = __DIR__.'/../vendor/autoloadLeevel.php'; if (is_file($autoloadLeevel)) { $composer = require $autoloadLeevel; } else { $composer = require __DIR__.'/../vendor/autoload.php'; }
composer.json 部分程式碼
{ "name": "hunzhiwange/queryphp", "description": "The QueryPHP Application.", "require": { "php": "^7.3.2", "hunzhiwange/framework": "dev-master" }, "extra": { "leevel-console" : { "autoload": { "@namespaces": "The white of Psr4", "namespaces": [ "Leevel", "Dotenv", "Carbon", "Monolog", "Whoops", "Swagger" ], "@files": "The white of autoload files", "files": [ "common/Infra/functions.php", "hunzhiwange/framework/src/Leevel/Leevel/functions.php" ] } } } }
更好地領域驅動分層實現,工作流支援
正在嘗試更好地程式碼實現領域驅動設計分層架構。
https://github.com/hunzhiwange/queryphp/blob/master/common/Domain/Service/User/Role/Update.php
鎖定部分元件版本
鎖定 doctrine/annotations ~1.6.0 和 zendframework/zend-diactoros ^2.1.1 減少相容性問題和修復使用者安裝報錯的問題,持續整合系統在 composer 最低依賴狀況下不會出錯。
https://github.com/hunzhiwange/queryphp/issues/1
幫助我們
QueryPHP 是在 2016 年 10 月開始基於一個我早年的 PHP 框架 DoYouHaoBaby 框架開發的。這個早年的框架是我在 2010 年 7.8 月開始的,那個時候在大二,開始的框架也主要用於自用。早年基於這個框架的一些應用作品如下:
DYHB.BLOG_X
DYHB.BLOG_X-2.0詳細安裝圖文教程 http://www.knowsky.com/804758.html
http://www.downcode.com/downcode/j_18106.shtml
https://github.com/hunzhiwange/dyhb.blog-x
WindsForce 社群
http://www.mycodes.net/code_previewmap.php?id=6185
https://github.com/hunzhiwange/windsforce
https://www.oschina.net/p/windsforce
目前 QueryPHP 由本人一人負責開發,文件,logo 設計,視訊,官網和宣傳需要大量精力。
如果你覺得可以,可以推薦朋友來試用一下,關注一哈,希望吸引到有興趣的一起開發,文件,。
用 10 年打造一個完美的作品,2010-present Xiangmin Liu。