摘要:二擴(kuò)展類的普通函數(shù)支持的樣式擴(kuò)展類的函數(shù),必須按照一定的規(guī)范來寫,返回值和參數(shù)的名稱類型都是有規(guī)定。最常見的是下面種函數(shù)樣式,跟上一章的普通函數(shù)的樣式其實差不多,返回值和參數(shù)的用法也完全一樣,所以就不再多說。
PHP擴(kuò)展是高級PHP程序員必須了解的技能之一,對于一個初入門的PHP擴(kuò)展開發(fā)者,怎么才能開發(fā)一個成熟的擴(kuò)展,進(jìn)入PHP開發(fā)的高級領(lǐng)域呢?本系列開發(fā)教程將手把手帶您從入門進(jìn)入高級階段。
本教程系列在linux下面開發(fā)(推薦使用centos),php版本用的是5.6,并假設(shè)您有一定的linux操作經(jīng)驗和c/c++基礎(chǔ)。
有問題需要溝通的朋友請加QQ技術(shù)交流群32550793和我溝通。
上一章演示了如何在PHP擴(kuò)展中導(dǎo)出普通函數(shù),本章介紹怎么樣在擴(kuò)展中導(dǎo)出類。使得PHP能夠在腳本中直接訪問擴(kuò)展中的C++類。
一、如何在PHP擴(kuò)展中導(dǎo)出C++類下面是使用PHP-CPP開發(fā)的一個擴(kuò)展骨架代碼,編譯可以導(dǎo)出一個演示C++類。
工程的源碼見github,可以用git客戶端下或者打開網(wǎng)址打包下載。
# git clone https://github.com/elvisszhang/phpcpp_counter.git
現(xiàn)在我們的類名是 Counter, 擴(kuò)展里面注冊類的語法是這樣子的
Php::Classcounter("Counter");
Counter類里面有個函數(shù)叫 increment,通過下面語法告訴擴(kuò)展讓php腳本能訪問這個函數(shù)。
counter.method<&Counter::increment> ("increment");
main.cpp 的C++源碼如下。
#include#include //擴(kuò)展的導(dǎo)出類 Counter class Counter : public Php::Base { private: int _value = 0; public: Counter() = default; virtual ~Counter() = default; //類的普通成員函數(shù) Php::Value increment() { return ++_value; } Php::Value decrement() { return --_value; } Php::Value value() const { return _value; } //類的靜態(tài)成員函數(shù) static Php::Value gettime() {return time();} }; //告訴編譯器get_module是個純C函數(shù) extern "C" { //get_module是擴(kuò)展的入口函數(shù) PHPCPP_EXPORT void *get_module() { static Php::Extension myExtension("counter", "1.0.0"); //初始化導(dǎo)出類 Php::Class counter("Counter"); //注冊導(dǎo)出類的可訪問普通函數(shù) counter.method<&Counter::increment> ("increment"); counter.method<&Counter::decrement> ("decrement"); counter.method<&Counter::value> ("value"); //注冊導(dǎo)出類的可訪問靜態(tài)函數(shù) counter.method<&Counter::gettime>("gettime"); //注冊導(dǎo)出類,使用右值引用方式,優(yōu)化資源使用 myExtension.add(std::move(counter)); //返回擴(kuò)展對象指針 return myExtension; } }
對應(yīng)上述例子的php測試代碼如下。
increment() . PHP_EOL; echo "result of increment() = ". $counter->increment() . PHP_EOL; echo "result of decrement() = ". $counter->decrement() . PHP_EOL; echo "result of value() = ". $counter->value() . PHP_EOL; echo "result of gettime() = ". Counter::gettime() . PHP_EOL; ?>
上述php代碼運(yùn)行后的輸出信息如下。
result of increment() = 1 result of increment() = 2 result of decrement() = 1 result of value() = 1 result of gettime() = 1523363778二、擴(kuò)展類的普通函數(shù)支持的樣式
擴(kuò)展類的函數(shù),必須按照一定的規(guī)范來寫,返回值和參數(shù)的名稱、類型都是有規(guī)定。否則就不能被PHP腳本認(rèn)識。
最常見的是下面4種函數(shù)樣式,跟上一章的普通函數(shù)的樣式其實差不多,返回值和參數(shù)的用法也完全一樣,所以就不再多說。
// signatures of supported regular methods void YourClass::example1(); void YourClass::example2(Php::Parameters ¶ms); Php::Value YourClass::example3(); Php::Value YourClass::example4(Php::Parameters ¶ms);
另外函數(shù)如果帶上修飾符 const。還有下面4種變化的樣式。
void YourClass::example5() const; void YourClass::example6(Php::Parameters ¶ms) const; Php::Value YourClass::example7() const; Php::Value YourClass::example8(Php::Parameters ¶ms) const;三、參考文獻(xiàn)
PHP-CPP幫助:classes-and-objects
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28573.html
摘要:二下載第一個擴(kuò)展第一個擴(kuò)展的源碼已經(jīng)在上準(zhǔn)備好了,直接用命令克隆,或者手工下載都可以。第四步確認(rèn)擴(kuò)展已經(jīng)安裝成功使用命令可以查看目前已經(jīng)安裝的所有擴(kuò)展。 PHP擴(kuò)展是高級PHP程序員必須了解的技能之一,對于一個初入門的PHP擴(kuò)展開發(fā)者,怎么才能開發(fā)一個成熟的擴(kuò)展,進(jìn)入PHP開發(fā)的高級領(lǐng)域呢?本系列開發(fā)教程將手把手帶您從入門進(jìn)入高級階段。本教程系列在linux下面開發(fā)(推薦使用cento...
摘要:四使用語言開發(fā)是我重點推薦的擴(kuò)展開發(fā)框架,簡明易懂,功能強(qiáng)大,開發(fā)效率高,代碼易維護(hù),執(zhí)行速度快。優(yōu)點三支持,的擴(kuò)展開發(fā)有兩套擴(kuò)展開發(fā)框架,分別支持,,雖然框架代碼有兩個,但是接口卻是一樣的。 PHP擴(kuò)展是高級PHP程序員必須了解的技能之一,對于一個初入門的PHP擴(kuò)展開發(fā)者,怎么才能開發(fā)一個成熟的擴(kuò)展,進(jìn)入PHP開發(fā)的高級領(lǐng)域呢?本系列開發(fā)教程將手把手帶您從入門進(jìn)入高級階段。本教程系列...
摘要:下載命令行瀏覽器下載網(wǎng)址和倉庫網(wǎng)址一樣一不帶參數(shù),沒有返回值的擴(kuò)展函數(shù)寫法函數(shù)功能打印以內(nèi)的素數(shù)函數(shù)名稱如何注冊擴(kuò)展函數(shù)必須在函數(shù)體中,注冊函數(shù),以便能在中能直接調(diào)用。函數(shù)有返回值,返回值類型設(shè)置為。 PHP擴(kuò)展是高級PHP程序員必須了解的技能之一,對于一個初入門的PHP擴(kuò)展開發(fā)者,怎么才能開發(fā)一個成熟的擴(kuò)展,進(jìn)入PHP開發(fā)的高級領(lǐng)域呢?本系列開發(fā)教程將手把手帶您從入門進(jìn)入高級階段。本...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗,增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗,增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
閱讀 3105·2021-08-03 14:05
閱讀 2152·2019-08-29 15:35
閱讀 688·2019-08-29 13:30
閱讀 3176·2019-08-29 13:20
閱讀 2541·2019-08-23 18:15
閱讀 1807·2019-08-23 14:57
閱讀 2224·2019-08-23 13:57
閱讀 1320·2019-08-23 12:10