ホームページ  >  記事  >  バックエンド開発  >  PHPにおける静的遅延バインディングと通常の静的効率の比較の詳細な説明

PHPにおける静的遅延バインディングと通常の静的効率の比較の詳細な説明

黄舟
黄舟オリジナル
2017-10-21 09:25:571396ブラウズ

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

上記の3つのクラスA、B、Cがあり、これらはすべて静的メンバー変数とメソッドです。そのうち、クラスAは静的遅延を使用し、
Bクラスは遅延のない

C クラスはクラス A を継承し、静的メンバー変数とメソッドの遅延バインディングを実装します。


プロセスの詳細については説明しません。環境は PHP5.4.27 です。テスト結果に直接進みましょう:

2 つの状況があります。

1.つまり、どのクラスもクラス A を継承することはできません)、効率にはほとんど違いはありません

2. クラス A がクラス C に継承される場合、静的遅延バインディングを使用したクラス A のパフォーマンスはクラスのパフォーマンスよりわずかに低下します。 B (クラス A がクラスを継承している限り、Slow に変更されます)

100,000 回サイクルし、2.8 秒〜 3.2 秒の時間差は約 0.3 秒であり、無視できるはずです

追加:

後で、クラス C の場合、クラス A を継承した後、クラス A の一部の静的メンバー変数がオーバーロードされると、速度はクラス B (遅延なし) に近づきます。クラス A は依然としてクラス B やクラス C よりも遅いです

以上がPHPにおける静的遅延バインディングと通常の静的効率の比較の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。