最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單談?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)文章

最新評論

东港市| 平顺县| 年辖:市辖区| 大厂| 包头市| 永胜县| 元朗区| 吐鲁番市| 郁南县| 班玛县| 巫溪县| 阜平县| 出国| 侯马市| 樟树市| 濮阳市| 浠水县| 万州区| 延吉市| 马公市| 淄博市| 芜湖县| 满洲里市| 津南区| 曲麻莱县| 利津县| 文昌市| 永兴县| 石台县| 紫金县| 永定县| 海晏县| 县级市| 盈江县| 济宁市| 柳江县| 西充县| 双江| 绥芬河市| 谢通门县| 陇南市|