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