码云创建php项目,【php扩展开发】扩展生成器

什么是扩展生成器

每个PHP的扩展都包含一些非常公共的并且非常单调的结构和文件,这些文件对所有扩展来说都是通用的。当开始一个新扩展开发的时候,如果这些公共的结构已经存在,而不需要费力去复制每个文件的内容,我们只需考虑填充功能代码那心情一定会愉快很多。

扩展生成器就是实现这些功能的脚本,帮助我们完成初始化工作.PHP源码中提供一个自带的生成器ext_skel。他在ext目录下。

ext_skel

它是一个shell脚本,仅有300多行。我们来看下关键部分代码

#生成config.m4配置文件

cat> config.m4 << eof

dnl $ Id $

dnl config.m4 用于扩展名$ extname

dnl 此文件中的注释以字符串'dnl'开头。

DNL删除其中必要的。此文件无效

dnl没有编辑。

dnl如果你的扩展引用了外部的东西,请使用:

DNL PHP_ARG_WITH($ extname,为 $ extname支持,

dnl确保注释已对齐:

dnl [--with- $ extname 包括$ extname support])

dnl否则使用enable:

PHP_ARG_ENABLE($ extname,是否启用 $ extname支持,

dnl确保注释已对齐:

[--enable- $ extname 启用$ extname支持])

.....省略一大串

EOF

#生成核心文件

$ ECHO_N “ $ extname .c $ ECHO_C ”

echo “s / extname / $ extname / g” > sedscript

echo “s / EXTNAME / $ EXTNAME / g” >> sedscript

echo '/ __ function_entries_here __ / r function_entries' >> sedscript

echo ' / __ function_stubs_here __ / r function_stubs' >> sedscript

echo '/ __ header_here __ / r ../../header' >> sedscript

echo '/ __ footer_here __ / r ../../footer' >> sedscript

echo '/ __ function_entries_here __ / D' >>

sedscript echo '/ __ function_stubs_here __ / D' >> sedscript

echo '/ __ header_here __ / D' >> sedscript

echo '/ __ footer_here __ / D' >> sedscript

if [!-z “ $ no_help ” ]; 然后

回显 “/ confirm_ $ extname_compiled / D” >> sedscript

echo '/删除以下/,/ ^ * // D' >> sedscript

echo 's / [[:space:]] / *。 + * ///' >> sedscript

echo 的/^/*.**/$//' >> sedscript

echo '/ ^ [[:space:]] * / * / ,/ ^ [[:space:]] * * // D' >>

sed -f sedscript < $ skel_dir /skeleton.c> $ extname .c

帮助说明

./ext_skel --help

它提示了我们脚本的命令行格式和支持的参数

./ext_skel --extname = module [--proto = file] [--stubs = file] [--xml [= file]]

[--skel = dir] [--full-xml] [ - no-help]

--extname = module 扩展名称,全为小写字母的标识符,仅包含字母和下划线,保证在php源码ext目录下的文件夹名唯一

--proto = file允许开发人员指定一个头文件,由此创建一系列PHP函数,表面上看就是要开发基于一个函数库的扩展,很少用

--stubs = file仅生成文件中的函数存根,生成IDE提示文件可能有用

--xml 生成要添加到phpdoc-svn没用的xml文档

--skel = dir路径到骨架目录指定扩展骨架目录,如果你想在ext目录以外的地方生成,那这个有用

--full-XML 生成 XML文档用于自包含的延伸部(未尚未实现)没用

--no的帮助不尝试是好的,并创建代码中的注释和辅助功能测试,如果该模块编译去除生成测试函数和注释等内容,除非你很熟练,不建议操作

示例

/ usr / local / src / php- 7.2。15 / ext / ext_skel --extname = twinkle_log --skel = / usr / local / src / php- 7.2。15 /分机/骨架/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值