首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 擴展自動生成工具:ext_skel、PECL_Gen/CodeGen_PECL 完整對比

     編輯:PHP 綜合知識

PHP 擴展包含大量樣板代碼。官方提供 ext_skel 腳本生成基礎骨架;PECL_Gen (現 CodeGen_PECL) 提供 XML 定義驅動的完整擴展生成,含 package.xml 打包支援。本文詳細對比兩工具用法與適用場景。

一、ext_skel:官方內建骨架生成器

基本用法

cd php-src/ext
./ext_skel --extname=sample7

輸出內容

ext/sample7/
├── config.m4
├── php_sample7.h
├── sample7.c
├── sample7.php        # 測試腳本
├── CREDITS
├── EXPERIMENTAL
└── tests/             # .phpt 測試樣本

生成後步驟

cd ..
vi ext/sample7/config.m4        # 啟用擴展 (取消註釋)
./buildconf                     # 重新生成 configure
./configure --enable-sample7    # 配置
make                            # 編譯
php -f ext/sample7/sample7.php  # 測試
vi ext/sample7/sample7.c        # 編寫實際功能
make                            # 重新編譯
# 重複驗證直到滿意

函式原型自動生成 (掃描 C 頭文件)

./ext_skel --extname=sample8 --proto=/usr/local/include/zlib/zlib.h
  • 掃描頭文件函式宣告,為每個函式生成 PHP_FUNCTION() 骨架。
  • 對未知資源型別會產生警告,需手動處理 (參考第 9 章資源型別)。

二、PECL_Gen / CodeGen_PECL:進階 XML 驅動生成器

安裝

pear install CodeGen_PECL
# 或
pecl install CodeGen_PECL

最小 XML 定義 (specfile.xml)

<?xml version="1.0" encoding="utf-8"?>
<extension name="sample9">
    <functions>
        <function name="sample9_hello_world" role="public">
            <code>
                <![CDATA[
                    php_printf("Hello World!");
                ]]>
            </code>
        </function>
    </functions>
</extension>

生成擴展

pecl-gen specfile.xml

產生完整可編譯擴展目錄 sample9/,含 package.xml (PEAR 安裝元數據)。

完整 XML 定義範例 (含套件元數據)

<?xml version="1.0" encoding="UTF-8"?>
<extension name="sample9">
    <summary>Extension 9 generated by PECL_Gen</summary>
    <description>Another sample of PHP Extension Writing</description>
    <maintainers>
        <maintainer>
            <name>John D. Bookreader</name>
            <email>jdb@example.com</email>
            <role>lead</role>
        </maintainer>
    </maintainers>
    <release>
        <version>0.1</version>
        <date>2006-01-01</date>
        <state>beta</state>
        <notes>Initial Release</notes>
    </release>
    <functions>
        <function name="sample9_hello_world" role="public">
            <code><![CDATA[php_printf("Hello World!");]]></code>
        </function>
        <function name="sample9_add" role="public">
            <proto>int sample9_add(int a, int b)</proto>
            <code><![CDATA[
                long a, b;
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &a, &b) == FAILURE) return;
                RETURN_LONG(a + b);
            ]]></code>
        </function>
    </functions>
</extension>

三、工具對比總結

特性ext_skelPECL_Gen / CodeGen_PECL
安裝PHP 原始碼內建需額外安裝 (PEAR/PECL)
輸入命令列參數 (--extname, --proto)XML 定義檔
輸出完整度基礎骨架 (需手動完善)完整可編譯擴展 + package.xml
函式原型生成支援 (--proto 掃描 C 頭文件)支援 (XML proto 節點)
資源型別處理產生警告,需手動修正同樣需手動處理
套件打包支援無自動生成 package.xml (PEAR/PECL 發布就緒)
適用場景快速原型、學習、簡單擴展正式發布、複雜擴展、團隊協作、CI/CD 整合
維護狀態PHP 核心維護CodeGen_PECL 為現代替代者

四、選擇建議

  • 初學者/快速驗證想法:ext_skel --extname=myext 最快上手。
  • 需對接現有 C 庫:ext_skel --extname=myext --proto=/path/to/lib.h 生成函式骨架,再手動填充資源管理代碼。
  • 計劃發布到 PECL/團隊專案:投資學習 CodeGen_PECL XML 定義,獲得標準化 package.xml、版本管理、釋出流程自動化。
  • 核心功能開發:工具**不會節省**商業邏輯編寫時間,僅消除樣板代碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved