资讯专栏INFORMATION COLUMN

【php 扩展开发】扩展生成器

wslongchen / 1609人阅读

摘要:什么是扩展生成器每个扩展都包含一些非常公共的并且非常单调的结构和文件,这些文件对所有扩展来说都是通用的。扩展生成器就是实现这些功能的脚本,帮助我们完成初始化工作。源码中提供一个自带的生成器。

什么是扩展生成器

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

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

ext_skel

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

# 生成 config.m4 配置文件

cat >config.m4 < 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" ]; then
    echo "/confirm_$extname_compiled/D" >> sedscript
    echo "/Remove the following/,/^*//D" >> sedscript
    echo "s/[[:space:]]/*.+*///" >> sedscript
    echo "s/^/*.**/$//" >> sedscript
    echo "/^[[:space:]]*/*/,/^[[:space:]]**//D" >> sedscript
fi

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              generate xml documentation to be added to phpdoc-svn 没用
  --skel=dir         path to the skeleton directory 指定扩展骨架目录,如果你想在 ext 目录以外的地方生成,那这个有用
  --full-xml         generate xml documentation for a self-contained extension (not yet implemented) 没用
  --no-help          don"t try to be nice and create comments in the code and helper functions to test if the module compiled 去除生成测试函数和注释等内容,除非你很熟练,不建议操作

示例

/usr/local/src/php-7.2.15/ext/ext_skel --extname=twinkle_log --skel=/usr/local/src/php-7.2.15/ext/skeleton/

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30947.html

相关文章

  • laravel开发扩展记录

    摘要:自动代码扩展开发时遵守的代码风格是项目开发规范。遵照此规范,在实际操作中,有许多重复,接下来推荐一款专为此规范量身定制的代码生成器。可以利用此扩展来快速构建项目原型。后续还会为大家带来一些最新的技术扩展。 whoops 错误提示扩展 whoops 是一个非常优秀的 PHP Debug 扩展,它能够使你在开发中快速定位出错的位置。laravel默认安装。showImg(https://s...

    fancyLuo 评论0 收藏0
  • laravel开发扩展记录

    摘要:自动代码扩展开发时遵守的代码风格是项目开发规范。遵照此规范,在实际操作中,有许多重复,接下来推荐一款专为此规范量身定制的代码生成器。可以利用此扩展来快速构建项目原型。后续还会为大家带来一些最新的技术扩展。 whoops 错误提示扩展 whoops 是一个非常优秀的 PHP Debug 扩展,它能够使你在开发中快速定位出错的位置。laravel默认安装。showImg(https://s...

    魏宪会 评论0 收藏0
  • PHP扩展开发:第一个扩展

    摘要:扩展开发第一个扩展扩展开发安装定时器在上一篇文章扩展开发安装我们已经将开发扩展的环境安装成功,那么接下来采用最简单直接的方式创建第一个扩展。 PHP扩展开发:第一个扩展 《PHP扩展开发:安装PHP》《POSIX定时器:timer_settime() 》在上一篇文章《PHP扩展开发:安装PHP》我们已经将开发PHP扩展的PHP环境安装成功,那么接下来采用最简单直接的方式创建第一个扩展。...

    JerryWangSAP 评论0 收藏0
  • PHP扩展开发教程1 - 相关开发技术对比及介绍

    摘要:四使用语言开发是我重点推荐的扩展开发框架,简明易懂,功能强大,开发效率高,代码易维护,执行速度快。优点三支持,的扩展开发有两套扩展开发框架,分别支持,,虽然框架代码有两个,但是接口却是一样的。 PHP扩展是高级PHP程序员必须了解的技能之一,对于一个初入门的PHP扩展开发者,怎么才能开发一个成熟的扩展,进入PHP开发的高级领域呢?本系列开发教程将手把手带您从入门进入高级阶段。本教程系列...

    alaege 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<