真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

后期靜態(tài)綁定在PHP中的使用示例-創(chuàng)新互聯(lián)

這篇“后期靜態(tài)綁定在PHP中的使用示例”除了程序員外大部分人都不太理解,今天小編為了讓大家更加理解“后期靜態(tài)綁定在PHP中的使用示例”,給大家總結(jié)了以下內(nèi)容,具有一定借鑒價(jià)值,內(nèi)容詳細(xì)步驟清晰,細(xì)節(jié)處理妥當(dāng),希望大家通過(guò)這篇文章有所收獲,下面讓我們一起來(lái)看看具體內(nèi)容吧。

成都地區(qū)優(yōu)秀IDC服務(wù)器托管提供商(創(chuàng)新互聯(lián)).為客戶提供專業(yè)的移動(dòng)服務(wù)器托管,四川各地服務(wù)器托管,移動(dòng)服務(wù)器托管、多線服務(wù)器托管.托管咨詢專線:028-86922220

php有什么用

php是一個(gè)嵌套的縮寫名稱,是英文超級(jí)文本預(yù)處理語(yǔ)言,它的語(yǔ)法混合了C、Java、Perl以及php自創(chuàng)新的語(yǔ)法,主要用來(lái)做網(wǎng)站開發(fā),許多小型網(wǎng)站都用php開發(fā),因?yàn)閜hp是開源的,從而使得php經(jīng)久不衰。

首先,我們通過(guò)一段代碼來(lái)引入后期靜態(tài)綁定這一概念:


class A
{
    public static function who()
    {
        echo __CLASS__, PHP_EOL;
    }
    public static function test()
    {
        self::who();
    }
}

class B extends A
{
    public static function who()
    {
        echo __CLASS__, PHP_EOL;
    }
}

B::test(); // A

在這段代碼中,我們使用了self關(guān)鍵字,當(dāng)使用B類調(diào)用test()靜態(tài)方法時(shí),self指向的是A類的who()方法,因此,輸出的是A。別激動(dòng),這是普通的靜態(tài)綁定。self關(guān)鍵字調(diào)用的內(nèi)容取決于它定義時(shí)所在的類。也就是說(shuō)不管怎么繼承,用哪個(gè)子類來(lái)調(diào)用test()方法,self關(guān)鍵字都會(huì)調(diào)用的是A類的who()方法。

而后期靜態(tài)綁定呢?其實(shí)就有點(diǎn)像實(shí)例化的類對(duì)象,每個(gè)實(shí)例化的對(duì)象,調(diào)用的都是自身,而不是父類的屬性方法。普通的靜態(tài)調(diào)用可不是這樣,但是現(xiàn)實(shí)中我們又有這樣的需求,就像實(shí)例化對(duì)象的調(diào)用方式一樣來(lái)調(diào)用靜態(tài)屬性方法,這時(shí),我們就可以使用static關(guān)鍵字來(lái)實(shí)現(xiàn)后期靜態(tài)綁定。

class C
{
    public static function who()
    {
        echo __CLASS__, PHP_EOL;
    }
    public static function test()
    {
        static::who();
    }
}

class D extends C
{
    public static function who()
    {
        echo __CLASS__, PHP_EOL;
    }
}

D::test(); // D

當(dāng)使用static關(guān)鍵字后,這里D類調(diào)用的test()方法內(nèi)部調(diào)用的who()就是D類自己了。

官方文檔中的定義如下:

當(dāng)進(jìn)行靜態(tài)方法調(diào)用時(shí),該類名即為明確指定的那個(gè)(通常在 :: 運(yùn)算符左側(cè)部分);當(dāng)進(jìn)行非靜態(tài)方法調(diào)用時(shí),即為該對(duì)象所屬的類。

該功能從語(yǔ)言內(nèi)部角度考慮被命名為“后期靜態(tài)綁定”?!昂笃诮壎ā钡囊馑际钦f(shuō),static:: 不再被解析為定義當(dāng)前方法所在的類,而是在實(shí)際運(yùn)行時(shí)計(jì)算的。也可以稱之為“靜態(tài)綁定”,因?yàn)樗梢杂糜冢ǖ幌抻冢╈o態(tài)方法的調(diào)用。

除了self和static關(guān)鍵字外,我們還有一個(gè)parent關(guān)鍵字,這個(gè)關(guān)鍵字的意義就很明顯了,調(diào)用父類的靜態(tài)內(nèi)容。我們同時(shí)用三個(gè)關(guān)鍵字一起來(lái)進(jìn)行測(cè)試:

class E
{
    public static function who()
    {
        echo __CLASS__, PHP_EOL;
    }
    public static function test()
    {
        self::who();
        static::who();
    }
}

class F extends E
{
    public static function who()
    {
        echo __CLASS__, PHP_EOL;
    }
}

class G extends F
{
    public static function who()
    {
        parent::who();
        echo __CLASS__, PHP_EOL;
    }
}

G::test();

// E
// F
// G

最后,我們?cè)賮?lái)看兩個(gè)PHP的方法,一個(gè)是get_called_class()方法,用來(lái)獲取當(dāng)前調(diào)用的是哪個(gè)類。在靜態(tài)方法中可以根據(jù)調(diào)用方式判斷當(dāng)前類是哪個(gè)類來(lái)進(jìn)行其他的業(yè)務(wù)邏輯操作。另一個(gè)是forward_static_call()方法,用于靜態(tài)方法的調(diào)用。

class H
{
    public static function who()
    {
        echo __CLASS__ . ':' . join(',', func_get_args()), PHP_EOL;
    }
    public static function test()
    {
        echo get_called_class(), PHP_EOL;
        forward_static_call('who', 'a', 'b'); // xxx:a,b
        forward_static_call(['I', 'who'], 'c', 'd'); // I:c,d
        forward_static_call_array(['H', 'who'], ['e', 'f']); // H:e,f
    }
}

class I extends H
{
    public static function who()
    {
        echo __CLASS__ . ':' . join(',', func_get_args()), PHP_EOL;
    }
}

function who()
{
    echo 'xxx:' . join(',', func_get_args()), PHP_EOL;
}

H::test(); // H
// xxx:a,b
// I:c,d
// H:e,f
I::test(); // I
// xxx:a,b
// I:c,d
// H:e,f

注意,如果forward_static_call()不指定類名的話,將調(diào)用全局的方法。forward_static_call_array()則是將參數(shù)使用數(shù)組進(jìn)行傳遞。

測(cè)試代碼:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202001/source/%E5%90%8E%E6%9C%9F%E9%9D%99%E6%80%81%E7%BB%91%E5%AE%9A%E5%9C%A8PHP%E4%B8%AD%E7%9A%84%E4%BD%BF%E7%94%A8.php

感謝你的閱讀,希望你對(duì)“后期靜態(tài)綁定在PHP中的使用示例”這一關(guān)鍵問題有了一定的理解,具體使用情況還需要大家自己動(dòng)手實(shí)驗(yàn)使用過(guò)才能領(lǐng)會(huì),快去試試吧,如果想閱讀更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


當(dāng)前名稱:后期靜態(tài)綁定在PHP中的使用示例-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)網(wǎng)址:http://weahome.cn/article/giijh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部