摘要:上一篇擴展開發引導文章中。這篇文章就開始介紹使用工具來生成擴展項目文件注意這里的本身沒有這玩意,是我給自帶的起的別名這個工具就是還有點迷惑那不廢話了。至于其他參數自行了解。發現也是有這三個文件的。所以,不要質疑自己。
下載(領車)上一篇擴展開發引導文章中。創建了編寫擴展的三個基本文件。或許你會有個疑問
PHP沒有類似的自動生成項目框架的工具嗎? 當然有。
這篇文章就開始介紹使用 "php-ext-cli" 工具來生成擴展項目文件
注意這里的 "php-ext-cli" 本身沒有這玩意,是我給 PHP 自帶的起的別名
這個工具就是 php-src/ext/ext_skel
還有點迷惑? 那不廢話了。
順便給那個只會裝逼的司機加個功能(函數吧)
我用的是 php 5.6.30版本
不要糾結版本,當然也先別直接用 php7.x 版本
https://github.com/php-src/php
http://php.net/downloads.php
解壓(開門)tar zxf php-5.6.30.tar.gz
進入ext(上車)cd php-src/ext/
ext目錄中內容目錄內很多文件夾和文件 (車內豪華裝飾)
需要關心的暫時有:
ext_skel
其他擴展的文件夾
其他的先不管咯。
ext_skel 使用./ext_skel
? ext [PHP-5.6.30] ? ./ext_skel ./ext_skel --extname=module [--proto=file] [--stubs=file] [--xml[=file]] [--skel=dir] [--full-xml] [--no-help] --extname=module module is the name of your extension --proto=file file contains prototypes of functions to create --stubs=file generate only function stubs in file --xml generate xml documentation to be added to phpdoc-svn --skel=dir path to the skeleton directory --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
還只是先關心下 --extname 參數
./ext_skel --extname=laosiji
最簡單的理解就是 生成 一個 laosiji 的擴展項目
執行完 ./ext_skel --extname=laosiji 之后 就在 ext 目錄下生成一個 laosiji的目錄
進去看看咯
對了 暫時沒 ext_skel 什么事了。至于其他參數 自行了解。
發現也是有這三個文件的。至于文件里面的內容呢。那肯定跟上次自己寫的文件內容不同。不然我豈不是神?
說明下,對比下我們自己寫的三個文件 與 自動生成的。
不該少的沒少
多的先不管
關鍵地方不同的沒事
其實也相同(宏、宏、宏)
我們自己寫的也能生成擴展,也能生效。
所以,不要質疑自己。
后面的項目結構以自己寫的為主,也就是說不會用ext_skel的來。其實都一樣,區別在于更少
不廢話了,以上只是簡單提下 ext_skel 的使用說明
// 函數定義 ZEND_FUNCTION(laosiji_hello) { php_printf("hello laosiji! "); }聲明
ZEND_FUNCTION(laosiji_hello);使用
// functions entry 函數模塊 static zend_function_entry laosiji_functions[] = { ZEND_FE(laosiji_hello, NULL) // 聲明 {NULL, NULL, NULL} // 固定不變的 照著寫就行了 }; // module entry zend_module_entry laosiji_module_entry = { // ... laosiji_functions, /* Functions 載入函數模塊*/ // ... };@函數別名
既然是別名就不存在定義聲明咯 只要....就行了
static zend_function_entry laosiji_functions[] = { ZEND_FE(laosiji_hello, NULL) // 聲明 ZEND_NAMED_FE(laosiji_hi, ZEND_FN(laosiji_hello), NULL) // 函數別名 ZEND_NAMED_FE ZEND_FALIAS(laosiji_hehe, laosiji_hello, NULL) // 函數別名 ZEND_FALIAS {NULL, NULL, NULL} // 固定不變的 照著寫就行了 };測試
完整代碼php_laosiji.h
// 定義 擴展相關的宏 比如版本號 擴展名稱等等。。 #define PHP_LAOSIJI_EXTNAME "laosiji" #define PHP_LAOSIJI_VERSION "1.0.0" //加載config.h,如果配置了的話 #ifdef HAVE_CONFIG_H #include "config.h" #endif // 加載php頭文件 // 這個 很有必要哈 #include "php.h" // 多了個函數聲明哈 ZEND_FUNCTION(laosiji_hello);laosiji.c
#include "php_laosiji.h" // functions entry 函數模塊 static zend_function_entry laosiji_functions[] = { ZEND_FE(laosiji_hello, NULL) // 聲明 ZEND_NAMED_FE(laosiji_hi, ZEND_FN(laosiji_hello), NULL) // 函數別名 ZEND_NAMED_FE ZEND_FALIAS(laosiji_hehe, laosiji_hello, NULL) // 函數別名 ZEND_FALIAS {NULL, NULL, NULL} // 固定不變的 照著寫就行了 }; // module entry zend_module_entry laosiji_module_entry = { #if ZEND_MODULE_API_NO >= 20010901 STANDARD_MODULE_HEADER, #endif PHP_LAOSIJI_EXTNAME, /* 擴展名稱 */ laosiji_functions, /* Functions 載入函數模塊*/ NULL, /* MINIT */ NULL, /* MSHUTDOWN */ NULL, /* RINIT */ NULL, /* RSHUTDOWN */ NULL, /* MINFO */ #if ZEND_MODULE_API_NO >= 20010901 PHP_LAOSIJI_VERSION, /* 擴展版本 */ #endif STANDARD_MODULE_PROPERTIES}; #ifdef COMPILE_DL_LAOSIJI ZEND_GET_MODULE(laosiji) #endif // 函數定義 ZEND_FUNCTION(laosiji_hello) { php_printf("hello laosiji! "); }參考函數: https://github.com/imlaosiji/...
結束
函數別名: https://github.com/imlaosiji/...到目前看來這個司機進化了一點,算是有點本事(函數),也會隱藏自己(函數別名).
不過還不夠,參數?返回值?不急,休息下
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/23044.html
摘要:四依賴倒置原則依賴倒置原則簡介依賴倒置原則的英文名稱是,簡稱。依賴倒置原則的表現其實就是面向接口編程。依賴倒置原則的優點減少類間的耦合性,提高系統的穩定性。結合里氏替換原則使用接口負責定義屬性和方法,并且聲明與其他對象的依賴關系。 面向對象基本原則(2)- 里式代換原則與依賴倒置原則 面向對象基本原則(1)- 單一職責原則與接口隔離原則面向對象基本原則(2)- 里式代換原則與依賴倒置原...
摘要:找找出別人擴展真么寫的。這次主要說了下寫擴展要準備的一些基本知識。比如不同編譯方式這個你看別的擴展源碼的時候就會注意到具體作用。后面再來慢慢學習老司機的各種姿勢。包括,函數,函數參數,函數返回值,對象,類,命名空間等等等。 PHP擴展開發系列01 - 我要成為一名老司機 1. 關于擴展的教程貌似挺全了,為啥還寫? 記錄下我寫擴展的歷程 自認為會寫的更容易理解 我的宗旨就是 先用再識 ...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...
閱讀 2849·2021-11-22 11:56
閱讀 3553·2021-11-15 11:39
閱讀 898·2021-09-24 09:48
閱讀 759·2021-08-17 10:14
閱讀 1322·2019-08-30 15:55
閱讀 2753·2019-08-30 15:55
閱讀 1310·2019-08-30 15:44
閱讀 2775·2019-08-30 10:59