PHP内核贡献经验

最近我在关注PHP8的代码和变更,贡献了一些代码,这里想总结一下。

保留php-src仓库

因为php-src项目还是比较大的,所以我们每次去clone这个仓库是非常耗时的,所以我们可以先把github上面的php-srcgitee.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开发组的人大部分是在国外,由于时差问题,国内时间是下午和晚上他们会和我们交流,国内时间早上问问题基本不回了。