最近我在关注PHP8
的代码和变更,贡献了一些代码,这里想总结一下。
保留php-src仓库
因为php-src
项目还是比较大的,所以我们每次去clone
这个仓库是非常耗时的,所以我们可以先把github
上面的php-src
在gitee.com
上面做一个镜像,然后再从gitee
上面clone
下来,最后修改一个git remote
信息即可。而且这个仓库不要删除,留着来git pull
编译问题
因为我们在master
分支进行工作,所以免不了要经常编译,我们一定要习惯make clean
。而且我发现这个make clean
也清理不干净构建出来的文件,有一些需要自己手动去删除。举个例子,词法分析的文件,编译出来的文件,make clean
没有去删除,这就导致我某次编译失败了。
还有就是,如果我们直接./configure
,然后编译,会编译比较久,因为它会编译好多扩展,所以我如果只看核心的东西,我会加上--disable-all
。
stub文件
我们在内核代码中,经常会看到很多的stub
文件,这些文件其实是用来生成函数的arginfo
信息的。所以我们不要去手写函数的arginfo
信息。我们可以通过gen_stub.php
这个脚本来实现,生成方法如下:
1 | php build/gen_stub.php |
或者指定文件:
1 | php build/gen_stub.php 某个stub文件 |
因为跑这个脚本需要nikic
写的PHP-Parser
,而PHP-Parser
需要安装tokenizer
扩展,所以我们需要一个安装了tokenizer
扩展的php
来执行它,并且php
的版本要是7.1+
。
测试
我们改动了PHP
内核,难免会导致一些测试失败,所以我们需要去修改失败的测试。运行单个测试文件,我们可以这么做:
1 | php run-tests.php 失败的那个.phpt文件 |
时间问题
因为PHP
开发组的人大部分是在国外,由于时差问题,国内时间是下午和晚上他们会和我们交流,国内时间早上问问题基本不回了。