Yaf 介绍
- 用 C 语言开发的 PHP 框架,相比原生的 PHP 几乎不会带来额外的性能开销
- 所有的框架类不需要编译,在 PHP 启动的时候加载并常驻内存
- 更短的内存周转周期,提高内存利用率,降低内存占用率
- 灵巧的自动加载。支持全局和同部两种加载规则,方便类库共享
- 高性能的视图引擎
- 高度灵活可扩展的框架,支持自定义视图引擎、插件、自定义路由等等
- 内建多种路由,可以兼容目前常见的各种路由协议
- 强大而又高度灵活的配置文件支持,并支持缓存配置文件,避免复杂的配置结构带来的性能损失
- 在框架本身,对危险的操作习惯做了禁止
- 更快的执行速度,更少的内存占用
由于 Yaf 只提供一个 MVC 的基本骨架,所以我们有很大的开发自由度,可以实现一个自己最习惯的项目
执行流程

实现Laravel结构
可以通过修改配置来变更代码结构,例如在入口修改配置文件夹
1 | define('APP_ROOT', dirname(__DIR__)); |
修改应用目录和启动文件位置
1 | application.directory = APP_ROOT "/app/" |
这样就有了基础的结构,你可以加入 Laravel Mix 支持前端,或者是引入 Symfony 命令行
1 | use Symfony\Component\Console\Application; |
启动文件
启动文件经常实现的方法有几个,例如
1 | /** |
你可以选择把很多验证放在这里,如白名单、参数处理、路由重新分发等。我选择在这里把常量放入 Registry
1 | public function _initConfig() |
在项目中使用常量时可以直接获取
1 | $foo = Yaf\Registry::get('const_config')->bar; |
单元测试
由于 Yaf 只能同时存在一个应用,所以我们需要一个基类实现单例
如果是测试接口的返回值,需要测试用例,可以使用 Simple 请求
1 | public function testQueryMobile() |
如果是单元测试,直接常规操作就行了
1 | const TEST_MOBILE = '156XXXXXXXX'; |
命令行脚本
如果想自己实现命令行脚本,可以使用控制器的抽象方法实现
先创建一个脚本统一入口 yaf
1 | #!/usr/bin/env php |
这样就能在命令行统一访问 console 控制器了
1 | php yaf 脚本名 |
下一步就是创建 ConsoleController
1 | class ConsoleController extends BaseController |
最后就是具体的脚本,统一放在 app/Consoles 下
1 | class TestAction extends \Yaf\Action_Abstract |
execute() 是控制器实际调用的方法