亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

PHP-X 系列教程:擴(kuò)展內(nèi)定義類和對(duì)象

cpupro / 1217人閱讀

摘要:接著上一篇文章,本文開始在擴(kuò)展內(nèi)實(shí)現(xiàn)類的定義和對(duì)象操作。因此定義類,需要在的回調(diào)中進(jìn)行。使用類名方法名即可。連接成功連接失敗在中不僅可以創(chuàng)建擴(kuò)展內(nèi)置的類,還可以創(chuàng)建代碼定義的類。

接著上一篇文章,本文開始在擴(kuò)展內(nèi)實(shí)現(xiàn)類的定義和對(duì)象操作?;?b>PHP-X提供的封裝,使用C++語(yǔ)言可以輕松地實(shí)現(xiàn)一個(gè)PHP的類,還可以在C++代碼中創(chuàng)建任意PHP對(duì)象,調(diào)用對(duì)象方法、讀寫對(duì)象的屬性。

0x00 定義 PHP 類

底層Zend API有一個(gè)限制,定義函數(shù)必須在模塊初始化之前,定義類必須在模塊初始化之后。因此定義類,需要在ExtensiononStart回調(diào)中進(jìn)行。

new Class 表示創(chuàng)建一個(gè)新的PHP類,參數(shù)為類的名稱

調(diào)用Class對(duì)象的addMethod來(lái)添加方法,其中PHPX_ME(CppClass, test2),這里PHPX_ME是一個(gè)宏,展開是方法的名稱和函數(shù)指針,第二個(gè)參數(shù)是方法的修飾符,可以是STATIC、PROTECTEDABSTRACT等??梢允褂冒次换虿僮鞣O(shè)置多個(gè)修飾符,如STATIC | PUBLIC

調(diào)用Class對(duì)象的addProperty添加屬性

調(diào)用Class對(duì)象的addConstant添加類常量

PHPX_EXTENSION()
{
    Extension *ext = new Extension("test", "0.0.1");
    ext->onStart = [ext]
    {
        Class *c = new Class("CppClass");
        //注冊(cè)構(gòu)造方法
        c->addMethod(PHPX_ME(CppClass, __construct), CONSTRUCT);
        //普通方法
        c->addMethod(PHPX_ME(CppClass, test1));
        //普通方法
        c->addMethod(PHPX_ME(CppClass, test2), STATIC);
        //添加默認(rèn)屬性
        c->addProperty("age", 30);
        //添加常量
        c->addConstant("VERSION", "1.9.0");
        //注冊(cè)類
        ext->registerClass(c);
    };

    return ext;
}
0x01 實(shí)現(xiàn)類方法

方法與屬性、常量不同,屬性、常量添加后不需要再進(jìn)行額外的操作。類方法,需要編寫實(shí)際的邏輯代碼。

使用PHPX_METHOD(類名, 方法名)即可。注意方法實(shí)現(xiàn)的代碼必須在addMethod之前。

PHPX_FUNCTION函數(shù)相同,PHPX_METHOD也有argsretval兩個(gè)參數(shù),分別用于處理PHP方法調(diào)用的參數(shù)和返回值。不同的是PHPX_METHOD多了一個(gè)_this對(duì)象,相當(dāng)于PHP代碼中的$this。注意如果是靜態(tài)方法_thisnull

PHPX_METHOD(CppClass, __construct)
{
    echo("%s _construct
", _this.getClassName().c_str());
    Array array;
    array.append(1234);
    _this.set("name", array);
}

PHPX_METHOD(CppClass, test1)
{
    //讀取全局變量
    Variant server = global("_SERVER");
    var_dump(server);
    if (server.isArray())
    {
        Variant shell = Array(server)["SHELL"];
        var_dump(shell);
    }
    auto name = _this.get("name");
    var_dump(name);
}
0x02 讀寫屬性

調(diào)用_this.get(property_name)讀取對(duì)象屬性的值

調(diào)用_this.set(property_name, value)設(shè)置對(duì)象屬性的值

0x03 讀取類常量

使用constant函數(shù)獲取類常量。

auto value = constant("CppClass::VERSION");
var_dump(value); //輸出 1.9.0
0x04 編譯
make install
0x05 運(yùn)行
$o = new CppClass();
$o->test1();
0x06 創(chuàng)建 PHP 對(duì)象

PHP-X的擴(kuò)展中還可以創(chuàng)建PHP對(duì)象,與PHP交互操作。

Object redis = newObject("redis");
//連接 Redis
auto ret1 = redis.exec("connect", "127.0.0.1", 6379);
//Get Key
auto ret2 = redis.exec("get", "key");
//打印字符串
echo ("value=%s
", ret2.toCString());

newObject函數(shù)相當(dāng)于PHPnew語(yǔ)法,第一個(gè)參數(shù)為類名,從第二個(gè)參數(shù)開始為變長(zhǎng),是構(gòu)造方法的參數(shù),如newObject("test", 123, 456, "hello"),相當(dāng)于new test(123, 456, "hello")。創(chuàng)建的對(duì)象在C++里類型為Object

調(diào)用exec函數(shù)可執(zhí)行對(duì)象的方法,如redis.exec("connect", "127.0.0.1", 6379),就相當(dāng)于是$redis->connect("127.0.0.1", 6379)。執(zhí)行后返回方法調(diào)用的結(jié)果。

可以判斷結(jié)果是否為true,來(lái)驗(yàn)證連接是否正確建立。

if (ret1.toBool()) {
    //連接成功
} else {
    //連接失敗
}

PHP-X中不僅可以創(chuàng)建PHP擴(kuò)展內(nèi)置的類,還可以創(chuàng)建PHP代碼定義的類。

include("/data/webroot/Test.class.php");
Object testObj = newObject("Test", 123, 456, "hello");

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/25914.html

相關(guān)文章

  • PHP-X 系列教程:內(nèi)置函數(shù)的使用

    摘要:本文主要介紹內(nèi)置函數(shù)的使用,在擴(kuò)展開發(fā)中,會(huì)經(jīng)常用到這些內(nèi)置函數(shù),的封裝,使得調(diào)用這些函數(shù)像代碼一樣簡(jiǎn)單。的使用方法與語(yǔ)言的是完全一致的。包括的超全局變量和其他代碼使用關(guān)鍵詞聲明的全局變量。 本文主要介紹PHP-X內(nèi)置函數(shù)的使用,在PHP擴(kuò)展開發(fā)中,會(huì)經(jīng)常用到這些內(nèi)置函數(shù),PHP-X的封裝,使得調(diào)用這些函數(shù)像PHP代碼一樣簡(jiǎn)單。 echo 在擴(kuò)展中需要輸出一些內(nèi)容,可以使用echo函數(shù)...

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

    摘要:四使用語(yǔ)言開發(fā)是我重點(diǎn)推薦的擴(kuò)展開發(fā)框架,簡(jiǎn)明易懂,功能強(qiáng)大,開發(fā)效率高,代碼易維護(hù),執(zhí)行速度快。優(yōu)點(diǎn)三支持,的擴(kuò)展開發(fā)有兩套擴(kuò)展開發(fā)框架,分別支持,,雖然框架代碼有兩個(gè),但是接口卻是一樣的。 PHP擴(kuò)展是高級(jí)PHP程序員必須了解的技能之一,對(duì)于一個(gè)初入門的PHP擴(kuò)展開發(fā)者,怎么才能開發(fā)一個(gè)成熟的擴(kuò)展,進(jìn)入PHP開發(fā)的高級(jí)領(lǐng)域呢?本系列開發(fā)教程將手把手帶您從入門進(jìn)入高級(jí)階段。本教程系列...

    alaege 評(píng)論0 收藏0
  • 如何基于 PHP-X 快速開發(fā)一個(gè) PHP 擴(kuò)展

    摘要:這里看到,表明你的擴(kuò)展已經(jīng)加載成功了,現(xiàn)在就可以調(diào)用這個(gè)擴(kuò)展函數(shù)了。是不是很簡(jiǎn)單更多上面的例子還比較簡(jiǎn)單,只是編寫了一個(gè)擴(kuò)展函數(shù)。 PHP-X是我在2017年年初創(chuàng)建的一個(gè)新項(xiàng)目。這個(gè)項(xiàng)目的目標(biāo)就是讓有一定工作經(jīng)驗(yàn)的PHP程序都能夠具備擴(kuò)展開發(fā)的能力。 0x00 初衷 從2012年開始編寫swoole,現(xiàn)在算來(lái)已經(jīng)有5個(gè)年頭了。我發(fā)現(xiàn)編寫一個(gè) PHP 擴(kuò)展這個(gè)工作非常艱難。PHP 程序...

    callmewhy 評(píng)論0 收藏0
  • 我為什么要做 zendAPI 項(xiàng)目

    摘要:總得來(lái)說(shuō),從大三開始到入職奇虎這年,一直處于自己探索階段,各種折騰,浪費(fèi)了不少青春,收獲總得來(lái)說(shuō)不是很大。入職奇虎之后,有了一份穩(wěn)定的工作,從此一天當(dāng)作兩天來(lái)用,惡補(bǔ)我之前浪費(fèi)的青春。 經(jīng)過(guò)緊張的開發(fā),我終于費(fèi)了九牛二虎之力將 zendAPI 的項(xiàng)目官網(wǎng)做好上線了,眨眼已經(jīng)入職奇虎一年了,我也走完了我的職業(yè)生涯規(guī)劃的第一年,別問(wèn)我之前4年干啥去了,我去瀟灑了 (拉著幾個(gè)大學(xué)同學(xué)創(chuàng)業(yè)去了...

    MyFaith 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<