成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP擴(kuò)展開發(fā)教程4 - 開發(fā)我們自己的接口類

xiaodao / 1287人閱讀

摘要:二擴(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::Class counter("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

相關(guān)文章

  • PHP擴(kuò)展開發(fā)教程2 - 編寫第一個擴(kuò)展 hello world

    摘要:二下載第一個擴(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...

    Berwin 評論0 收藏0
  • PHP擴(kuò)展開發(fā)教程1 - 相關(guān)開發(fā)技術(shù)對比及介紹

    摘要:四使用語言開發(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)入高級階段。本教程系列...

    alaege 評論0 收藏0
  • PHP擴(kuò)展開發(fā)教程3 - 開發(fā)一個我們自己數(shù)學(xué)函數(shù)庫

    摘要:下載命令行瀏覽器下載網(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)入高級階段。本...

    Barry_Ng 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來學(xué)習(xí)一門新編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗,增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...

    caspar 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來學(xué)習(xí)一門新編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗,增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...

    nihao 評論0 收藏0

發(fā)表評論

0條評論

xiaodao

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<