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

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

php面向?qū)ο缶幊坦P記static的后期靜態(tài)綁定

最近在看laravel的源碼,開(kāi)始的時(shí)候static關(guān)鍵字的用法讓我讀完一頭霧水,

10多年的華安網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整華安建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“華安網(wǎng)站設(shè)計(jì)”,“華安網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

static不應(yīng)該是用來(lái)定義靜態(tài)變量方法和屬性的么?

在方法中

static::setInstance($this);

是什么?

查了手冊(cè)才明白,這是static關(guān)鍵字的另一種用法,“后期靜態(tài)綁定”,也可以稱為“靜態(tài)綁定”

http://php.net/manual/zh/language.oop5.late-static-bindings.php

官方的介紹:

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

官方的幾個(gè)例子很好的說(shuō)明了后期靜態(tài)綁定的意思

self::的限制

使用 self:: 或者 __CLASS__ 對(duì)當(dāng)前類的靜態(tài)引用,取決于定義當(dāng)前方法所在的類:

Example #1 self:: 用法

輸出:A


后期靜態(tài)綁定的用法

后期靜態(tài)綁定本想通過(guò)引入一個(gè)新的關(guān)鍵字表示運(yùn)行時(shí)最初調(diào)用的類來(lái)繞過(guò)限制。簡(jiǎn)單地說(shuō),這個(gè)關(guān)鍵字能夠讓你在上述例子中調(diào)用 test() 時(shí)引用的類是 B 而不是 A。最終決定不引入新的關(guān)鍵字,而是使用已經(jīng)預(yù)留的 static 關(guān)鍵字。

Example #2 static:: 簡(jiǎn)單用法

輸出:B

在這里static相當(dāng)于self,parent一樣的關(guān)鍵字,用來(lái)調(diào)用方法,不過(guò)與self不同,static調(diào)用的類并不一定是靜態(tài)屬性和靜態(tài)方法,這點(diǎn)上看更接近于parent這個(gè)關(guān)鍵字的用法。

but,在下面的例子了還看到這樣一種用法

在父類里并未定義$name這個(gè)屬性,這時(shí)候在子類里必須

static $name

不過(guò)一般程序應(yīng)該不會(huì)出現(xiàn)這種父類沒(méi)定義屬性而直接使用的情況吧。

-----------------------------------------------------------------------------------------------------------

另外,測(cè)試?yán)拥臅r(shí)候想到這么一個(gè)情況

class A {
    public static function who() {
        echo __CLASS__;
    }
    public function test() {
        static::who();
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}
(new B())->test();

非靜態(tài)方法可以調(diào)用靜態(tài)方法,反之則不行


laravel設(shè)計(jì)模式中大量使用了這種靜態(tài)綁定的方法,尤其是核心功能Facades。

php面向?qū)ο缶幊踢€有很多東西需要了解。。。


本文標(biāo)題:php面向?qū)ο缶幊坦P記static的后期靜態(tài)綁定
當(dāng)前鏈接:http://weahome.cn/article/jscgii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部