摘要:常規(guī)的擴(kuò)展開發(fā)流程我再別的文章里面已經(jīng)介紹過了,這里不再贅述,只介紹一下開發(fā)擴(kuò)展的不同之處。剩下的代碼自己用自由發(fā)揮吧。
由于PHP的底層就是C開發(fā)的,不可避免的常用PHP擴(kuò)展也都是C開發(fā)的,但是有時(shí)我們想用C++來開發(fā)可以嗎,答案當(dāng)然是可以的,并且有它自己的優(yōu)勢(shì),第一可以方便地面向?qū)ο缶幊蹋诙梢岳矛F(xiàn)有C++編譯的動(dòng)態(tài)鏈接庫。
常規(guī)的PHP擴(kuò)展開發(fā)流程我再別的文章里面已經(jīng)介紹過了,這里不再贅述,只介紹一下C++開發(fā)PHP擴(kuò)展的不同之處。
修改config.m4利用ext_skel工具生成擴(kuò)展的基礎(chǔ)框架,默認(rèn)生成的框架是針對(duì)C的,所以針對(duì)C++修改config.m4文件
config.m4文件是編譯基礎(chǔ)中最核心的文件,這個(gè)文件主要是用autoconf來產(chǎn)生configure配置文件,繼而自動(dòng)生成大家所熟悉的Makefile文件。需要注意的是,每次修改config.m4,需要phpize --clean,再重新phpize
PHP_ARG_WITH(dict, for hsdt support, Make sure that the comment is aligned: [ --with-demo Include demo support])
表示demo擴(kuò)展需要依賴外部動(dòng)態(tài)鏈接庫,在configure的時(shí)候 --with-demo的參數(shù)表示依賴外部動(dòng)態(tài)鏈接庫的路徑,比如編譯PHP時(shí)使用的--with-curl=/usr/local/libcurl表示依賴的libcurl.so的路徑在/usr/local/libcurl里面
PHP_ADD_INCLUDE($DEMO_DIR/include)
表示依賴的外部動(dòng)態(tài)鏈接庫的include的頭文件的路徑
PHP_REQUIRE_CXX()
表示這個(gè)擴(kuò)展使用C++
PHP_SUBST(DEMO_SHARED_LIBADD)
用于說明這個(gè)擴(kuò)展編譯成動(dòng)態(tài)鏈接庫的形式
PHP_ADD_LIBRARY(stdc++, 1, DEMO_SHARED_LIBADD)
用于將標(biāo)準(zhǔn)C++庫加入擴(kuò)展
PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $DICT_DIR/lib64, DICT_SHARED_LIBADD)
用于將依賴的外部動(dòng)態(tài)鏈接庫加入擴(kuò)展
PHP_NEW_EXTENSION(demo, xxx.cpp yyy.cpp zzz.cpp, $ext_shared,, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
第2行指定哪些源文件需要編譯,中間用空格間隔
修改源文件包括.h文件和.cpp文件,因?yàn)镻HP提供的ZEND API都是C編寫的,所以在include的時(shí)候需要在外面加一層extern "C",目的是把一些C寫的庫或宏用兼容的方式給解決。剩下的代碼自己用C++自由發(fā)揮吧。
extern "C" { #ifdef ZTS #include "TSRM.h" #endif }
extern "C" { #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_ini.h" #include "ext/standard/info.h" }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30340.html
摘要:四使用語言開發(fā)是我重點(diǎn)推薦的擴(kuò)展開發(fā)框架,簡(jiǎn)明易懂,功能強(qiáng)大,開發(fā)效率高,代碼易維護(hù),執(zhí)行速度快。優(yōu)點(diǎn)三支持,的擴(kuò)展開發(fā)有兩套擴(kuò)展開發(fā)框架,分別支持,,雖然框架代碼有兩個(gè),但是接口卻是一樣的。 PHP擴(kuò)展是高級(jí)PHP程序員必須了解的技能之一,對(duì)于一個(gè)初入門的PHP擴(kuò)展開發(fā)者,怎么才能開發(fā)一個(gè)成熟的擴(kuò)展,進(jìn)入PHP開發(fā)的高級(jí)領(lǐng)域呢?本系列開發(fā)教程將手把手帶您從入門進(jìn)入高級(jí)階段。本教程系列...
摘要:二擴(kuò)展類的普通函數(shù)支持的樣式擴(kuò)展類的函數(shù),必須按照一定的規(guī)范來寫,返回值和參數(shù)的名稱類型都是有規(guī)定。最常見的是下面種函數(shù)樣式,跟上一章的普通函數(shù)的樣式其實(shí)差不多,返回值和參數(shù)的用法也完全一樣,所以就不再多說。 PHP擴(kuò)展是高級(jí)PHP程序員必須了解的技能之一,對(duì)于一個(gè)初入門的PHP擴(kuò)展開發(fā)者,怎么才能開發(fā)一個(gè)成熟的擴(kuò)展,進(jìn)入PHP開發(fā)的高級(jí)領(lǐng)域呢?本系列開發(fā)教程將手把手帶您從入門進(jìn)入高級(jí)...
摘要:第一步打開項(xiàng)目下的文件,在文件中輸入我們的函數(shù)的原型聲明代碼。這行代碼注冊(cè)一個(gè)原型為的函數(shù),當(dāng)這個(gè)函數(shù)被執(zhí)行的時(shí)候,我們的函數(shù)將被運(yùn)行時(shí)調(diào)用。原文地址開發(fā)擴(kuò)展之原生函數(shù)定義 在上一篇中我們?cè)趆ellozapi擴(kuò)展中我們定義了幾個(gè)常量,但是一個(gè)有用的擴(kuò)展,必須得有函數(shù),沒有函數(shù)的擴(kuò)展啥用沒有,如果您覺得定義函數(shù)很難的話,您又錯(cuò)了,zendAPI就是為了讓您生活變得美好而生的,而不會(huì)讓事情...
摘要:前面兩節(jié)介紹了如何用編寫常用的擴(kuò)展函數(shù),擴(kuò)展類。對(duì)怎么使用開發(fā)擴(kuò)展應(yīng)該已經(jīng)很熟悉了,下面晉級(jí)學(xué)習(xí)一下關(guān)于擴(kuò)展函數(shù)參數(shù)類型方面的內(nèi)容。 PHP擴(kuò)展是高級(jí)PHP程序員必須了解的技能之一,對(duì)于一個(gè)初入門的PHP擴(kuò)展開發(fā)者,怎么才能開發(fā)一個(gè)成熟的擴(kuò)展,進(jìn)入PHP開發(fā)的高級(jí)領(lǐng)域呢?本系列開發(fā)教程將手把手帶您從入門進(jìn)入高級(jí)階段。本教程系列在linux下面開發(fā)(推薦使用centos),php版本用的...
摘要:每一個(gè)擴(kuò)展必須有一個(gè)描述對(duì)象,在中我們類主要的作用主要完成這個(gè)功能。表示我們擴(kuò)展導(dǎo)出符號(hào)給其他庫使用。文章使用的編程文檔的引用連接參考手冊(cè)參考手冊(cè)原文鏈接開發(fā)擴(kuò)展之模塊入口定義 zendAPI 項(xiàng)目不提供任何底層的功能,只是封裝了 zend engine 提供的功能,對(duì)上提供一個(gè)易用的編程接口。這篇文章中,我們將介紹 C++ 世界與 C 世界交匯的地方,在這里也是 zendAPI 的接...
閱讀 665·2021-11-23 09:51
閱讀 3612·2021-11-15 11:38
閱讀 943·2021-10-14 09:42
閱讀 3190·2021-09-29 09:35
閱讀 2126·2021-09-03 10:33
閱讀 780·2021-07-30 16:33
閱讀 1569·2019-08-30 15:55
閱讀 1855·2019-08-30 14:04