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; } }
B 類別是非延遲,
C 類別是繼承A類別實作了靜態成員變數和方法的延遲綁定。
##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中文網其他相關文章!