PHP擴充開發之開發我們自己的介面類

來源:互聯網
上載者:User
本篇文章給大家分享的內容是PHP擴充開發之開發我們自己的介面類,有著一定的參考價值,有需要的朋友可以參考一下

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::Class<Counter> counter("Counter");

Counter類裡面有個函數叫 increment,通過下面文法告訴擴充讓php指令碼能訪問這個函數。

counter.method<&Counter::increment> ("increment");

main.cpp 的C++源碼如下。

#include <phpcpp.h>#include <time.h>//擴充的匯出類 Counterclass 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");                //註冊匯出類的可訪問普通函數        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測試代碼如下。

<?php$counter = new Counter;echo 'result of increment() = '. $counter->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() = 1result of increment() = 2result of decrement() = 1result of value() = 1result of gettime() = 1523363778

二、擴充類的普通函數支援的樣式

擴充類的函數,必須按照一定的規範來寫,傳回值和參數的名稱、類型都是有規定。否則就不能被PHP指令碼認識。

最常見的是下面4種函數樣式,跟上一章的普通函數的樣式其實差不多,傳回值和參數的用法也完全一樣,所以就不再多說。

// signatures of supported regular methodsvoid        YourClass::example1();void        YourClass::example2(Php::Parameters &params);Php::Value  YourClass::example3();Php::Value  YourClass::example4(Php::Parameters &params);

另外函數如果帶上修飾符 const。還有下面4種變化的樣式。

void        YourClass::example5() const;void        YourClass::example6(Php::Parameters &params) const;Php::Value  YourClass::example7() const;Php::Value  YourClass::example8(Php::Parameters &params) const;

三、參考文獻

PHP-CPP協助:classes-and-objects


PHP擴充是進階PHP程式員必須瞭解的技能之一,對於一個初入門的PHP擴充開發人員,怎麼才能開發一個成熟的擴充,進入PHP開發的進階領域呢?本系列開發教程將手把手帶您從入門進入進階階段。
本教程系列在linux下面開發(推薦使用centos),php版本用的是5.6,並假設您有一定的linux操作經驗和c/c++基礎。
有問題需要溝通的朋友請加QQ技術交流群32550793和我溝通。


上一章示範了如何在PHP擴充中匯出普通函數,本章介紹怎麼樣在擴充中匯出類。使得PHP能夠在指令碼中直接存取擴充中的C++類。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.