摘要:常規的擴展開發流程我再別的文章里面已經介紹過了,這里不再贅述,只介紹一下開發擴展的不同之處。剩下的代碼自己用自由發揮吧。
由于PHP的底層就是C開發的,不可避免的常用PHP擴展也都是C開發的,但是有時我們想用C++來開發可以嗎,答案當然是可以的,并且有它自己的優勢,第一可以方便地面向對象編程,第二可以利用現有C++編譯的動態鏈接庫。
常規的PHP擴展開發流程我再別的文章里面已經介紹過了,這里不再贅述,只介紹一下C++開發PHP擴展的不同之處。
修改config.m4利用ext_skel工具生成擴展的基礎框架,默認生成的框架是針對C的,所以針對C++修改config.m4文件
config.m4文件是編譯基礎中最核心的文件,這個文件主要是用autoconf來產生configure配置文件,繼而自動生成大家所熟悉的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擴展需要依賴外部動態鏈接庫,在configure的時候 --with-demo的參數表示依賴外部動態鏈接庫的路徑,比如編譯PHP時使用的--with-curl=/usr/local/libcurl表示依賴的libcurl.so的路徑在/usr/local/libcurl里面
PHP_ADD_INCLUDE($DEMO_DIR/include)
表示依賴的外部動態鏈接庫的include的頭文件的路徑
PHP_REQUIRE_CXX()
表示這個擴展使用C++
PHP_SUBST(DEMO_SHARED_LIBADD)
用于說明這個擴展編譯成動態鏈接庫的形式
PHP_ADD_LIBRARY(stdc++, 1, DEMO_SHARED_LIBADD)
用于將標準C++庫加入擴展
PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $DICT_DIR/lib64, DICT_SHARED_LIBADD)
用于將依賴的外部動態鏈接庫加入擴展
PHP_NEW_EXTENSION(demo, xxx.cpp yyy.cpp zzz.cpp, $ext_shared,, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
第2行指定哪些源文件需要編譯,中間用空格間隔
修改源文件包括.h文件和.cpp文件,因為PHP提供的ZEND API都是C編寫的,所以在include的時候需要在外面加一層extern "C",目的是把一些C寫的庫或宏用兼容的方式給解決。剩下的代碼自己用C++自由發揮吧。
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" }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30340.html
摘要:四使用語言開發是我重點推薦的擴展開發框架,簡明易懂,功能強大,開發效率高,代碼易維護,執行速度快。優點三支持,的擴展開發有兩套擴展開發框架,分別支持,,雖然框架代碼有兩個,但是接口卻是一樣的。 PHP擴展是高級PHP程序員必須了解的技能之一,對于一個初入門的PHP擴展開發者,怎么才能開發一個成熟的擴展,進入PHP開發的高級領域呢?本系列開發教程將手把手帶您從入門進入高級階段。本教程系列...
摘要:二擴展類的普通函數支持的樣式擴展類的函數,必須按照一定的規范來寫,返回值和參數的名稱類型都是有規定。最常見的是下面種函數樣式,跟上一章的普通函數的樣式其實差不多,返回值和參數的用法也完全一樣,所以就不再多說。 PHP擴展是高級PHP程序員必須了解的技能之一,對于一個初入門的PHP擴展開發者,怎么才能開發一個成熟的擴展,進入PHP開發的高級領域呢?本系列開發教程將手把手帶您從入門進入高級...
摘要:第一步打開項目下的文件,在文件中輸入我們的函數的原型聲明代碼。這行代碼注冊一個原型為的函數,當這個函數被執行的時候,我們的函數將被運行時調用。原文地址開發擴展之原生函數定義 在上一篇中我們在hellozapi擴展中我們定義了幾個常量,但是一個有用的擴展,必須得有函數,沒有函數的擴展啥用沒有,如果您覺得定義函數很難的話,您又錯了,zendAPI就是為了讓您生活變得美好而生的,而不會讓事情...
摘要:前面兩節介紹了如何用編寫常用的擴展函數,擴展類。對怎么使用開發擴展應該已經很熟悉了,下面晉級學習一下關于擴展函數參數類型方面的內容。 PHP擴展是高級PHP程序員必須了解的技能之一,對于一個初入門的PHP擴展開發者,怎么才能開發一個成熟的擴展,進入PHP開發的高級領域呢?本系列開發教程將手把手帶您從入門進入高級階段。本教程系列在linux下面開發(推薦使用centos),php版本用的...
摘要:每一個擴展必須有一個描述對象,在中我們類主要的作用主要完成這個功能。表示我們擴展導出符號給其他庫使用。文章使用的編程文檔的引用連接參考手冊參考手冊原文鏈接開發擴展之模塊入口定義 zendAPI 項目不提供任何底層的功能,只是封裝了 zend engine 提供的功能,對上提供一個易用的編程接口。這篇文章中,我們將介紹 C++ 世界與 C 世界交匯的地方,在這里也是 zendAPI 的接...
閱讀 653·2021-11-23 09:51
閱讀 3600·2021-11-15 11:38
閱讀 927·2021-10-14 09:42
閱讀 3163·2021-09-29 09:35
閱讀 2104·2021-09-03 10:33
閱讀 769·2021-07-30 16:33
閱讀 1558·2019-08-30 15:55
閱讀 1841·2019-08-30 14:04