PHP の静的遅延バインディングと通常の静的効率の簡単な比較
これは、遅延バインディングと遅延なしのバインディングの効率を比較する単純な実験です
遅延バインディングでは、主に static キーワードが使用されます。オリジナルの自己ですが、機能は非常に強力です
実験コード:
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 の 3 つがあり、いずれも静的なメンバー変数とメソッドです。このうち、
クラス A は静的遅延を使用し、
クラス B は静的遅延を使用します。非静的。
C クラスはクラス A を継承し、静的メンバー変数とメソッドの遅延バインディングを実装します。
環境は PHP5.4.27 で、テスト結果を直接アップロードします:
2 つのタイプがあります。
1. クラス A と B のみがある (つまり、クラス A を継承できるクラスがない) 場合、効率にほとんど違いはありません
2. クラス A をクラス C に継承した場合 その後、静的遅延バインディングを使用したクラス A のパフォーマンスはクラス B よりもわずかに低下します (クラス A がクラスを継承している限り、パフォーマンスは遅くなります)
ループ 10 万回、2.8 秒 ~ 3.2 秒の時間差は約 0.3 秒であり、無視できる程度です
追記:
その後、いくつかのテストメソッドが追加されました。
クラス C がクラス A を継承し、クラス A の静的メンバー変数の一部をオーバーロードする場合、オーバーロードを増やすほど高速になります。クラス B (遅延なし) と比較されますが、クラス A の速度はクラス B およびクラス C よりも遅くなります