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

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

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

使用場(chǎng)景

先來(lái)觀察以下代碼:

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)在的代碼看起來(lái)好像已經(jīng)符合我們之前的想法,將create()方法放在父類里共用了,那我們來(lái)運(yùn)行下看會(huì)發(fā)生什么。

Cannot instantiate abstract class base in ...

很遺憾,代碼好像并沒(méi)有按照我們預(yù)想的那樣去運(yùn)行,父類中的self()被解析為base這個(gè)父類,并非繼承與他的子類。于是為了解決這個(gè)問(wèn)題,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ì)解析為子類,而非父類,這樣就可以解決上面遇到的問(wèn)題,這就是php的延遲靜態(tài)綁定。

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

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

相關(guān)文章

最新評(píng)論

贞丰县| 连州市| 六安市| 东丽区| 秀山| 巴彦淖尔市| 临高县| 江城| 昌宁县| 耒阳市| 新密市| 河东区| 分宜县| 盘山县| 灵宝市| 五家渠市| 米脂县| 安徽省| 广东省| 东港市| 衡东县| 上杭县| 石首市| 双流县| 石屏县| 格尔木市| 扎赉特旗| 乐至县| 平度市| 巢湖市| 昭苏县| 甘谷县| 那坡县| 民权县| 文安县| 安平县| 郓城县| 万安县| 葫芦岛市| 米脂县| 绩溪县|