91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php延遲靜態綁定的方法

發布時間:2021-07-01 10:08:07 來源:億速云 閱讀:143 作者:chen 欄目:開發技術

本篇內容介紹了“php延遲靜態綁定的方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

使用場景

先來觀察以下代碼:

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這個抽象類,但是在兩個子類中同時實現了create()這個靜態方法。遵從oop思想,這種重復代碼應該放在base這個父類中實現。

改進代碼

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());

現在的代碼看起來好像已經符合我們之前的想法,將create()方法放在父類里共用了,那我們來運行下看會發生什么。

Cannot instantiate abstract class base in ...

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

延遲靜態綁定

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這個關鍵字,static會解析為子類,而非父類,這樣就可以解決上面遇到的問題,這就是php的延遲靜態綁定。

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

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

“php延遲靜態綁定的方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

五莲县| 湟中县| 皋兰县| 夹江县| 叶城县| 安达市| 高密市| 乡城县| 岱山县| 开封市| 喀喇沁旗| 原平市| 武山县| 河池市| 平武县| 芦溪县| 墨竹工卡县| 灵石县| 通山县| 石河子市| 丹寨县| 锦州市| 德保县| 彭水| 邢台市| 义乌市| 即墨市| 宜城市| 华蓥市| 旬邑县| 民勤县| 古蔺县| 焦作市| 高邑县| 广宗县| 灵台县| 长宁县| 平顺县| 从江县| 康平县| 白水县|