Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des Vergleichs zwischen statischer verzögerter Bindung und normaler statischer Effizienz in PHP

Detaillierte Erläuterung des Vergleichs zwischen statischer verzögerter Bindung und normaler statischer Effizienz in PHP

黄舟
黄舟Original
2017-10-21 09:25:571396Durchsuche

Vergleich der statischen verzögerten PHP-Bindung und der gewöhnlichen statischen Effizienz

Es ist nur ein einfaches Experiment, bei dem die Effizienz der verzögerten Bindung und der nicht verzögerten Bindung verglichen wird

Lazy Binding verwendet hauptsächlich das Schlüsselwort static, um das ursprüngliche Selbst zu ersetzen, aber die Funktion ist sehr leistungsfähig

Experimenteller Code:


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; 
  } 
}

Da Es gibt oben drei Klassen A, B und C, bei denen es sich allesamt um statische Mitgliedsvariablen und -methoden handelt:

Klasse A verwendet statische Verzögerung,
Klasse B ist keine Verzögerung
Klasse C erbt Klasse A und implementiert die verzögerte Bindung statischer Mitgliedsvariablen und -methoden.

Ich werde nicht viel über den Prozess sagen. Die Umgebung ist PHP5.4.27. Laden Sie die Testergebnisse direkt hoch:

Es gibt zwei Situationen:

1 . Wenn es nur die Klassen A und B gibt (d. h. keine Klasse darf Klasse A erben), gibt es fast keinen Unterschied in der Effizienz

2 Wenn Klasse A von Klasse C geerbt wird, Die Leistung von Klasse A mit statischer verzögerter Bindung ist etwas schlechter als die von Klasse B (solange Klasse A geerbte Klassen hat, ist sie langsamer)

100.000-malige Schleife, und der Zeitunterschied zwischen 2,8 Sekunden ~ 3,2 s sind ungefähr 0,3 Sekunden.

Zusätzlicher Hinweis: Später habe ich einige Testmethoden hinzugefügt, die Klasse A erben und einige der statischen Mitgliedsvariablen in der Klasse überladen A, Nachladen: Je mehr Ladungen, desto näher kommt die Geschwindigkeit der Klasse B (ohne Verzögerung), aber die Geschwindigkeit der Klasse A wird immer noch langsamer sein als die der Klasse B und der Klasse C

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Vergleichs zwischen statischer verzögerter Bindung und normaler statischer Effizienz in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn