PHP5.3之後引入了延遲靜態綁定static,它是爲了解決什麼問題呢?php的繼承模型中有一個存在已久的問題,那就是在父類中引用擴展類的最終狀態比較困難。來看一個例子。php
static與self的區別:
self是類內指針,指向本類的靜態方法和屬性
static使得父類能訪問子類的重載靜態方法spa
<?php class A { public static function echoClass(){ echo __CLASS__; } public static function test(){ self::echoClass();echo '<br/>';//輸出A static::echoClass();//輸出C } } class B extends A { public static function echoClass() { echo __CLASS__; } } class C extends A { public static function echoClass() { echo __CLASS__; } } C::test();
說明:指針
(1)使用關鍵字static表示哪一個類調用,就表明那個類。code
(2)static::方法名():使用static關鍵詞,則首先是在子類裏查找該方法;若是找不到,則到父類中查找blog
上面代碼中繼承
self::echoClass(); == A::echoClass(); //因此輸出Aio
static::echoClass(); == C::echoClass(); //因此輸出Cfunction
做用:class
父類中引用擴展類的最終狀態比較困難,用static能解決test