首頁  >  文章  >  後端開發  >  php中關於靜態延遲綁定與普通靜態效率的對比詳解

php中關於靜態延遲綁定與普通靜態效率的對比詳解

黄舟
黄舟原創
2017-10-21 09:25:571375瀏覽

PHP靜態延遲綁定和普通靜態效率的對比

只是一個簡單的小實驗,對比了下延遲綁定和非延遲的效率

#延遲綁定主要是使用static 關鍵字來取代原來的self ,但功能非常強大了

#實驗程式碼:


##

class A { 
  protected static $cc1 = array('a1', 'b', 'c', 'd'); 
  protected static $cc2 = array('a2', 'b', 'c', 'd'); 
  protected static $cc3 = array('a3', 'b', 'c', 'd'); 
  protected static $cc4 = array('a4', 'b', 'c', 'd'); 
  protected static $cc5 = array('a5', 'b', 'c', 'd'); 
 
  public static function n1() { 
    return static::$cc1; 
  } 
  public static function n2() { 
    return static::$cc2; 
  } 
  public static function n3() { 
    return static::$cc3; 
  } 
  public static function n4() { 
    return static::$cc4; 
  } 
  public static function n5() { 
    return static::$cc5; 
  } 
} 
 
class C extends A { 
 
} 
 
class B { 
  protected static $cc1 = array('a1', 'b', 'c', 'd'); 
  protected static $cc2 = array('a2', 'b', 'c', 'd'); 
  protected static $cc3 = array('a3', 'b', 'c', 'd'); 
  protected static $cc4 = array('a4', 'b', 'c', 'd'); 
  protected static $cc5 = array('a5', 'b', 'c', 'd'); 
 
  public static function n1() { 
    return self::$cc1; 
  } 
  public static function n2() { 
    return self::$cc2; 
  } 
  public static function n3() { 
    return self::$cc3; 
  } 
  public static function n4() { 
    return self::$cc4; 
  } 
  public static function n5() { 
    return self::$cc5; 
  } 
}

上面總共A 、B 、C 三個類,裡面全是靜態成員變數和方法,其中


A 類別是使用了靜態延遲,

B 類別是非延遲,
C 類別是繼承A類別實作了靜態成員變數和方法的延遲綁定。

流程也不多說了,環境是PHP5.4.27 直接上測試結果:

有兩種情況,


##1. 當只有A、B類別(也就是不讓任何類別繼承A類別)時,效率上幾乎沒有差別的


2. 當A類別被C類別繼承了之後,使用靜態延遲綁定的A類別效能將會比B類稍差一些(只要A類有了繼承的類別就會變慢)

循環十萬次,耗時在2.8s ~ 3.2s 之間時間差距在0.3 秒左右,應該還是可以忽略不計了吧

補充個:

後來加了些測試方法,如果C 類別繼承A 類別後,重載了部分A 類別中的靜態成員變量,重載的越多則速度和B 類(非延遲)就越接近,但A 類的速度仍會比B 類和C 類慢

以上是php中關於靜態延遲綁定與普通靜態效率的對比詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn