经过 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 来实现了惰性加载。
<?phpdeclare(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');__('国际化');
例子函数
<?phpdeclare(strict_types=1);namespaceLeevel\Support\Str;/** * 随机数字. * *@paramint $length *@paramstring $charBox * *@returnstring */functionrand_num(int $length, ?string $charBox = null):string{if(!$length) {return''; }if(null=== $charBox) { $charBox ='0123456789'; }returnrand_str($length, $charBox);}// @codeCoverageIgnoreStartif(!function_exists('Leevel\\Support\\Str\\rand_str')) {include__DIR__.'/rand_str.php';}// @codeCoverageIgnoreEnd
Facade 优化
最开始采用的 Laravel 的继承一个基础的 Facade,方便单元测试,有一定性能损失。后来觉得在做单元测试只需要清空容器注册的服务就可以所以优化了一版本。
<?phpdeclare(strict_types=1);namespaceLeevel\Encryption\Facade;useLeevel\Leevel\App;/** * 门面 encryption. * *@authorXiangmin Liu <635750556@qq.com> * *@since2017.06.10 * *@version1.0 */classEncryption{/** * call. * *@paramstring $method *@paramarray $args * *@returnmixed */publicstaticfunction__callStatic(string $method, array $args){returnApp::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。
网友评论