minbaby / php-ext-startup

php-ext-startup php-extension startup

Home Page:https://minbaby.github.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

学习 php 扩展

CircleCI xcxc codecov

基本思路

  1. 先写测试用例
  2. 再用 php 实现
  3. 再用 ext 实现
  4. 跑测试

测试思路

利用 php 自动加载的逻辑。

  1. 默认禁用扩展执行一遍测试,这个时候执行的是 PHP 逻辑
  2. 启用扩展再执行一次扩展, 这个时候执行的是 EXT 逻辑 (这个地方有个问题,如果 ext 扩展不存在,那么就会降级使用 php 代码)

使用函数动态生成对应的�带有命名空间的类名,原因是之前的思路存在漏洞,�因为自动加载的存在,导致如果 ext 中不存在,就会自动降级为 php 代码。

学习方式

如果我们需要查看这个项目,那么思路是什么的?

  1. 先看 spec/ 这些文件的测试用例。
  2. 查看 src/Minbaby/ 目录下的 php 实现
  3. 查看 src/ext 目录下的 c 实现

常用命令

  1. 测试所有
composer run test
# or
make ext-first
  1. 测试 php 部分代码
composer run test-php
# or
make ext-test
  1. 测试 ext 部分代码
composer run test-ext
# or
make ext-test-ext
  1. 其他命令
make ext-clean # clean code

make ext-fetch # fetch configure ext code from github

make ext-prepare # phpize & configure

make ext-buidl

TODO

说明

  • 本项目只是学习实践使用
  • 使用 @ 抑制符不是一个好习惯,尽量不要使用。
  • 依赖 mb_string 扩展

已知问题

skip ci

  • [skip ci]
  • [ci skip]

参考

About

php-ext-startup php-extension startup

https://minbaby.github.io

License:MIT License


Languages

Language:C 39.5%Language:PHP 38.3%Language:Shell 21.0%Language:M4 0.9%Language:Makefile 0.2%Language:JavaScript 0.1%