国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP學(xué)習(xí)筆記——延遲靜態(tài)綁定

whjin / 3317人閱讀

摘要:于是為了解決這個(gè)問題,中引入了延遲靜態(tài)綁定這個(gè)概念。延遲靜態(tài)綁定這個(gè)代碼與之前的幾乎一致,不同點(diǎn)在于將換成了這個(gè)關(guān)鍵字,會(huì)解析為子類,而非父類,這樣就可以解決上面遇到的問題,這就是的延遲靜態(tài)綁定。

使用場(chǎng)景

先來觀察以下代碼:

abstract class base {
    //do sth
}

class aClass extends base{
    public static function create(){
        return new aClass();
    } 
}

class bClass extends base{
    public static function create(){
        return new bClass();
    }
}
var_dump(aClass::create());
var_dump(bClass::create());

輸出:

object(aClass)#1 (0) { } object(bClass)#1 (0) { }

以上aClass和bClass繼承于base這個(gè)抽象類,但是在兩個(gè)子類中同時(shí)實(shí)現(xiàn)了create()這個(gè)靜態(tài)方法。遵從oop思想,這種重復(fù)代碼應(yīng)該放在base這個(gè)父類中實(shí)現(xiàn)。

改進(jìn)代碼
abstract class base {
    public static function create(){
        return new self();
    } 
}

class aClass extends base{

}

class bClass extends base{

}

var_dump(aClass::create());
var_dump(bClass::create());

現(xiàn)在的代碼看起來好像已經(jīng)符合我們之前的想法,將create()方法放在父類里共用了,那我們來運(yùn)行下看會(huì)發(fā)生什么。

Cannot instantiate abstract class base in ...

很遺憾,代碼好像并沒有按照我們預(yù)想的那樣去運(yùn)行,父類中的self()被解析為base這個(gè)父類,并非繼承與他的子類。于是為了解決這個(gè)問題,php5.3中引入了延遲靜態(tài)綁定這個(gè)概念。

延遲靜態(tài)綁定
abstract class base {
    public static function create(){
        return new static();
    } 
}

class aClass extends base{

}

class bClass extends base{

}

var_dump(aClass::create());
var_dump(bClass::create());

這個(gè)代碼與之前的幾乎一致,不同點(diǎn)在于將self換成了static這個(gè)關(guān)鍵字,static會(huì)解析為子類,而非父類,這樣就可以解決上面遇到的問題,這就是php的延遲靜態(tài)綁定。

最后,運(yùn)行一下代碼,得到了最終想要的結(jié)果。

object(aClass)#1 (0) { } object(bClass)#1 (0) { }

[參考文獻(xiàn)]深入PHP面向?qū)ο蟆⒛J脚c實(shí)踐

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/30284.html

相關(guān)文章

  • 【Laravel】Laravel 框架關(guān)鍵技術(shù)解析·讀書筆記(一)

    摘要:判斷是否存在構(gòu)造函數(shù),不存在直接實(shí)例化,存在則通過來獲取輸入函數(shù),并有相應(yīng)的方法解決依賴參數(shù)問題,實(shí)現(xiàn)依賴注入。 Laravel 框架關(guān)鍵技術(shù)解析·讀書筆記(一) 第一章 入口文件 請(qǐng)求訪問的入口文件,主要完成幾部分工作,分別是: 自動(dòng)加載函數(shù)的添加 服務(wù)器實(shí)例化與服務(wù)注冊(cè) 路由加載 請(qǐng)求實(shí)例化與路由分發(fā) 相應(yīng)生成與發(fā)送 其中,自動(dòng)加載函數(shù)用于包含引用文件,改文件是composer...

    CocoaChina 評(píng)論0 收藏0
  • Laravel學(xué)習(xí)筆記之bootstrap源碼解析

    摘要:總結(jié)本文主要學(xué)習(xí)了啟動(dòng)時(shí)做的七步準(zhǔn)備工作環(huán)境檢測(cè)配置加載日志配置異常處理注冊(cè)注冊(cè)啟動(dòng)。 說明:Laravel在把Request通過管道Pipeline送入中間件Middleware和路由Router之前,還做了程序的啟動(dòng)Bootstrap工作,本文主要學(xué)習(xí)相關(guān)源碼,看看Laravel啟動(dòng)程序做了哪些具體工作,并將個(gè)人的研究心得分享出來,希望對(duì)別人有所幫助。Laravel在入口index...

    xiaoxiaozi 評(píng)論0 收藏0
  • php: static keyword

    摘要:函數(shù)內(nèi)的變量靜態(tài)變量的理解靜態(tài)變量類型說明符是。靜態(tài)變量雖在程序的整個(gè)執(zhí)行過程中始終存在,但是在它作用域之外不能使用。靜態(tài)變量并不是說其就不能改變值,不能改變值的量叫常量。 函數(shù)內(nèi)的static變量 static靜態(tài)變量的理解 靜態(tài)變量 類型說明符是static。靜態(tài)變量屬于靜態(tài)存儲(chǔ)方式,其存儲(chǔ)空間為內(nèi)存中的靜態(tài)數(shù)據(jù)區(qū)(在 靜態(tài)存儲(chǔ)區(qū)內(nèi)分配存儲(chǔ)單元),該區(qū)域中的數(shù)據(jù)在整個(gè)程序的運(yùn)行期間...

    Astrian 評(píng)論0 收藏0
  • PHP靜態(tài)方法和屬性、延遲靜態(tài)綁定

    摘要:靜態(tài)方法和屬性靜態(tài)方法是以類作為作用域的函數(shù)。靜態(tài)方法不能訪問這個(gè)類中的普通屬性,因?yàn)槟切傩詫儆谝粋€(gè)對(duì)象,但可以訪問靜態(tài)屬性。因此靜態(tài)方法和屬性又被稱為類變量和屬性,也就不能在靜態(tài)方法中使用偽變量。引入了延遲靜態(tài)綁定的概念。 靜態(tài)方法和屬性 靜態(tài)方法是以類作為作用域的函數(shù)。靜態(tài)方法不能訪問這個(gè)類中的普通屬性,因?yàn)槟切傩詫儆谝粋€(gè)對(duì)象,但可以訪問靜態(tài)屬性。如果修改了一個(gè)靜態(tài)屬性,那么這...

    rubyshen 評(píng)論0 收藏0
  • ThinkPhp學(xué)習(xí)筆記(一)

    摘要:如上為三個(gè)模塊行為行為是在預(yù)先定義好的一個(gè)應(yīng)用位置執(zhí)行的一些操作。發(fā)生作用的位置稱之為鉤子,當(dāng)應(yīng)用程序運(yùn)行到這個(gè)鉤子的時(shí)候,就會(huì)被攔截下來,統(tǒng)一執(zhí)行相關(guān)的行為。給某一個(gè)鉤子綁定相關(guān)行為就成了一種類編程的思想。 ThinkPhp5.0 Composer: php世界里的包管理器 目錄結(jié)構(gòu) project 應(yīng)用部署目錄 ├─application 應(yīng)用目錄(可設(shè)置) ...

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

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

0條評(píng)論

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