hail / framework
PHP 7.1 Framework
v0.7.38
2024-02-04 16:32 UTC
Requires
- php: >=7.1.0
- ext-json: *
- ext-mbstring: *
- psr/cache: ^1.0
- psr/container: ^1.0
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
- psr/http-server-middleware: ^1.0
- psr/log: ^1.0
- psr/simple-cache: ^1.0
Suggests
- ext-curl: handle http client with curl support.
- ext-fileinfo: use for MemeType, image processing.
- ext-ftp: handle filesystem with ftp support.
- ext-gd: use for GD library based image processing.
- ext-gmp: use for ES signature in JWT
- ext-iconv: use for Strings::reverse, Strings::chr, Strings::toAscii, MimePart::encodeHeader, EncodingHelper::attemptConversion
- ext-imagick: use for Imagick based image processing.
- ext-intl: use for Utf8String::compare, Utf8String::transliterate, Strings::toAscii, Strings::normalize, Strings::compare, NumberFormatCell, DateFormatCell,
- ext-openssl: use for Crypto and RS signature in JWT
- ext-psr: Providing the accepted PSR interfaces
- ext-seaslog: improve the performance for logger
- ext-swoole: improve performance
- dev-master
- 0.7.x-dev
- v0.7.38
- v0.7.37
- v0.7.36
- v0.7.35
- v0.7.34
- v0.7.33
- v0.7.32
- v0.7.31
- v0.7.30
- v0.7.29
- v0.7.28
- v0.7.27
- v0.7.26
- v0.7.25
- v0.7.24
- v0.7.23
- v0.7.22
- v0.7.21
- v0.7.20
- v0.7.19
- v0.7.18
- v0.7.17
- v0.7.16
- v0.7.15
- v0.7.14
- v0.7.13
- v0.7.12
- v0.7.11
- v0.7.10
- v0.7.9
- v0.7.8
- v0.7.7
- v0.7.6
- v0.7.5
- v0.7.4
- v0.7.3
- v0.7.2
- v0.7.1
- v0.7.0
- dev-develop
This package is auto-updated.
Last update: 2024-11-04 18:05:36 UTC
README
基于 PHP 7.1 的 MVC 框架
Installation
Composer (recommended)
composer require "hail/framework:dev-master"
框架设计
设计方向
- 尽可能使用最新的 PHP
- 减少依赖,除非十分必要不会 composer 依赖其他库
- 第一目标是方便使用,其次才是功能覆盖
- 持续优化,对代码效率时刻保持关注
- 使用 PHP 扩展得到更好的性能
- 使用 Zephir 将框架编译为扩展
PHP版本依赖
- PHP 版本更新往往会带来性能、代码质量、开发效率的提高,所以框架希望尽可能的使用最新的版本
- 框架 1.0 之前,有极大的可能使用最新的 PHP 版本
- 框架 1.0 之后,当有新的 PHP 版本发布,会审视新版本对性能和开发的影响,再确定是否提高依赖
- 当 PHP 版本依赖提高之后,主要开发将基于最新版本进行,并保留一个老版本的分支,只进行必要的维护
库的依赖
- 尽可能减少 composer 依赖
- 有的库过于复杂,希望能够进行简化
- 依赖库的功能可能并不是全部都想要的,避免引入无用的文件
- 依赖可能会产生风险
- 框架会引入第三方代码,并进行适当的修改以符合框架本身设计与功能需求
- 这些代码权理所当然依然属于库作者自己,引入中会尽量保留作者的版权声明,如果有遗漏请提醒: flyinghail@msn.com
Zephir
- Zephir 是 PHP 开发很好的补充,不过只有当框架已经比较完善的基础上,才会尝试使用 Zephir 提高性能
- 在打开 Opcache 的情况下, PHP 本身已经相当快,一些简单的功能,并不会比使用 C 扩展慢很多
- 如果您追求极致的性能,可以先试试: Phalcon (github) 或者 Ice (github)
Implements PSR
- PSR-2 Coding Style Guide
- PSR-3 Logger Interface
- PSR-4 Autoloading Standard
- PSR-6 Caching Interface
- PSR-7 HTTP message interfaces
- PSR-11 Container Interface
- PSR-14 Event Manager
- PSR-15 HTTP Handlers
- PSR-16 Simple Cache
- PSR-17 HTTP Factories
- PSR-18 HTTP Client
Features
Optimize & OptimizeTrait
- 自动选择 PHP 缓存 extension: ['yac', 'pcache', 'xcache', 'wincache', 'apcu'],类内缓存,最大限度的减少性能损失
Config
- 可以使用 Yaml 或者 PHP 进行配置
- 优先使用 yaml extension
- 从 Yaml 生成 PHP 配置缓存,避免重复解析 Yaml 结构
- 使用 OptimizeTrait 减少文件读取带来的性能损失
Factory
- 基于配置构造对象
- 继承框架的默认配置
- 同配置从 Factory 得到的对象唯一
Container & Dependency Injection
- 基于配置预生成静态 Container,性能几乎等同于手写代码
- 可动态配置、添加、替换已有的 Component
- 基于 Reflection 进行依赖注入,不支持 auto-wiring,所有依赖必须是基于已配置的 Component
Router
- 基于树形结构,查询一个节点的时间复杂度为 O(log n),速度均匀,没有所谓的最坏情况
- 支持参数和单节点的正则匹配
- 利用 ['app', 'controller', 'action'] 参数调用框架 Controller,也可以使用 Clouser
- 使用 OptimizeTrait 缓存路由树结构,避免每次访问重新构造路由表
I18N
- 使用 gettext 处理多语言
- 优先使用 gettext extension
Database
- 通过 PDO 支持 MySQL、PostgreSQL、Sybase、Oracle、SQL Server、Sqlite
- 基于数组生成 SQL 语句,自动 prepare
- 提供简单 ORM 支持 [未测试]
- 基于命令行提供 Migration 工具 [未测试]
- 基于 swoole 的连接池 [未测试]
Redis
- 简单的 PHP Native Redis Client
- 优先使用 phpredis extension
- 支持 Redis Cluster [未测试]
- 支持 Redis Sentinel [未测试]
- 基于 swoole 的连接池 [未测试]
Template
- 直接使用原生 PHP 作为模板语言
- 使用 VUE.js 作为默认的 JS 动态处理库
- 支持编译 VUE.js 模板语法为 PHP 语句 (使用 v-php 标注) [未测试]
- h:* HTML属性模板语法, 灵感来自 Latte [todo] [未测试]
Swoole
- 基于命令行的 Http Server [未测试]
Pool
- 单进程内连接池,,非 swoole 协程环境下没有意义
Console
- 基于命令行工具进行项目优化、Migration、服务管理等
Useful Libraries
项目中如果有需要可以自行 composer 安装
- Mobile Detect 通过 User-Agent 和 header 检测移动设备
- Crawler Detect 通过 User-Agent 和 header 检测爬虫
- Spout 读写 Excel 文件 (CSV, XLSX, ODS),速度快,支持超大文件,占用内存小
Extensions
Required
Suggest
- intl 部分字符串处理函数和 CLI 命令中使用
- iconv 部分字符串处理函数中使用
- openssl 基于 RSA/AES 加/解密 和 JWT 中使用 RS 签名
- fileinfo MimeType 判断和图像处理中使用
- curl 基于 Curl 的 HTTP 客户端
- imagick 基于 ImageMagick 的图像处理
- gd 基于 GD 的图像处理
- ftp 文件系统中支持 FTP
- gmp JWT 中使用 ES 签名