欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單談?wù)刾hp延遲靜態(tài)綁定

 更新時間:2016年01月26日 09:51:07   投稿:hebedich  
php5.3是php5的一個里程碑,加入了大量新特性。本文主要給大家介紹了php5.3的一個新功能--延遲靜態(tài)綁定,希望能夠?qū)Υ蠹矣兴鶐椭?/div>

使用場景

先來觀察以下代碼:

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這個抽象類,但是在兩個子類中同時實現(xiàn)了create()這個靜態(tài)方法。遵從oop思想,這種重復(fù)代碼應(yīng)該放在base這個父類中實現(xià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()方法放在父類里共用了,那我們來運行下看會發(fā)生什么。

Cannot instantiate abstract class base in ...

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

延遲靜態(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());

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

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

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

相關(guān)文章

  • 淺析Yii2中GridView常見操作

    淺析Yii2中GridView常見操作

    本文是小編給大家收集整理些有關(guān)網(wǎng)絡(luò)上Yii2中GridView常見操作中出現(xiàn)的大部分問題,本文做一個總結(jié)特此分享到腳本之家平臺供大家參考
    2016-04-04
  • ajax+php實現(xiàn)無刷新驗證手機號的實例

    ajax+php實現(xiàn)無刷新驗證手機號的實例

    下面小編就為大家分享一篇ajax+php實現(xiàn)無刷新驗證手機號的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 安裝docker和docker-compose實例詳解

    安裝docker和docker-compose實例詳解

    在本篇文章里小編給大家分享的是關(guān)于安裝docker和docker-compose的具體實例和代碼,需要的朋友們可以學(xué)習(xí)下。
    2019-07-07
  • yii實現(xiàn)創(chuàng)建驗證碼實例解析

    yii實現(xiàn)創(chuàng)建驗證碼實例解析

    這篇文章主要介紹了yii實現(xiàn)創(chuàng)建驗證碼的方法,很常見的一類功能,需要的朋友可以參考下
    2014-07-07
  • php使用Swoole實現(xiàn)毫秒級定時任務(wù)的方法

    php使用Swoole實現(xiàn)毫秒級定時任務(wù)的方法

    這篇文章主要介紹了php使用Swoole實現(xiàn)毫秒級定時任務(wù)的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • PHP實現(xiàn)頁面靜態(tài)化的超簡單方法

    PHP實現(xiàn)頁面靜態(tài)化的超簡單方法

    下面小編就為大家?guī)硪黄狿HP實現(xiàn)頁面靜態(tài)化的超簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 關(guān)于Thinkphp6的日志問題

    關(guān)于Thinkphp6的日志問題

    這篇文章主要介紹了關(guān)于Thinkphp6的日志問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Codeigniter發(fā)送郵件的方法

    Codeigniter發(fā)送郵件的方法

    這篇文章主要介紹了Codeigniter發(fā)送郵件的方法,涉及Codeigniter實現(xiàn)郵件發(fā)送的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • PHP CURL 內(nèi)存泄露問題解決方法

    PHP CURL 內(nèi)存泄露問題解決方法

    這篇文章主要介紹了PHP CURL 內(nèi)存泄露問題解決方法,CRUL長時間訪問HTTPS網(wǎng)站時有內(nèi)存泄露問題,本文經(jīng)過反復(fù)調(diào)試找到了解決方法,需要的朋友可以參考下
    2015-02-02
  • Laravel 中使用簡單的方法跟蹤用戶是否在線(推薦)

    Laravel 中使用簡單的方法跟蹤用戶是否在線(推薦)

    最近小編在做一個需求,需要在Laravel應(yīng)用程序用戶個人資料頁面上,用戶名旁邊添加一個綠點,表示他們是否在線。下面小編給大家?guī)硪环N簡單方法實現(xiàn)Laravel 跟蹤用戶是否在線,感興趣的朋友一起看看吧
    2019-10-10

最新評論