- 先写测试用例
- 再用 php 实现
- 再用 ext 实现
- 跑测试
利用 php 自动加载的逻辑。
默认禁用扩展执行一遍测试,这个时候执行的是 PHP 逻辑启用扩展再执行一次扩展, 这个时候执行的是 EXT 逻辑 (这个地方有个问题,如果 ext 扩展不存在,那么就会降级使用 php 代码)
使用函数动态生成对应的�带有命名空间的类名,原因是之前的思路存在漏洞,�因为自动加载的存在,导致如果 ext 中不存在,就会自动降级为 php 代码。
如果我们需要查看这个项目,那么思路是什么的?
- 先看
spec/
这些文件的测试用例。 - 查看
src/Minbaby/
目录下的 php 实现 - 查看
src/ext
目录下的 c 实现
- 测试所有
composer run test
# or
make ext-first
- 测试 php 部分代码
composer run test-php
# or
make ext-test
- 测试 ext 部分代码
composer run test-ext
# or
make ext-test-ext
- 其他命令
make ext-clean # clean code
make ext-fetch # fetch configure ext code from github
make ext-prepare # phpize & configure
make ext-buidl
- 本项目只是学习实践使用
- 使用
@
抑制符不是一个好习惯,尽量不要使用。 - 依赖
mb_string
扩展
- 0.0 很多
- memory leak (可能使用改方案来排查 https://github.com/arnaud-lb/php-memory-profiler)
[skip ci]
[ci skip]