這篇文章介紹的內容是關於【php類別與物件】後期靜態綁定,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
後期靜態綁定
PHP 5.3.0
用於:繼承範圍內引用靜態呼叫的類別
工作原理:
可用 get_called_class() 函數來得到被呼叫的方法所在的類別名,static:: 則指出了其範圍。
「後期綁定」的意思是說,static:: 不再被解析為定義當前方法所在的類,而是在實際運行時計算的。
也可以稱之為“靜態綁定”,因為它可以用於(但不限於)靜態方法的呼叫。
<?phpclass A { public static function who() { echo __CLASS__; //返回该类被定义时的名字 } public static function test() { self::who(); } }class B extends A { // public static function who() { // echo __CLASS__; // }} B::test(); //A?>
後期靜態綁定的用法
後期靜態綁定本想透過引入一個新的關鍵字表示運行時最初呼叫的類別來繞過限制。 簡單來說,這個關鍵字能夠讓你在上述例子中呼叫 test() 時引用的類別是 B 而不是 A。最後決定不引入新的關鍵字,而是使用已經預留的 static 關鍵字。Example #2 static:: 简单用法<?phpclass A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // 注意使用static,后期静态绑定从这里开始 } }class B extends A { public static function who() { echo __CLASS__; } } B::test(); //B?>
另一個差異是 static:: 只能用於靜態屬性。
##工作原理:
此功能從語言內部角度考慮被命名為「後期靜態綁定」。
也可以稱之為“靜態綁定”,因為它可以用於(但不限於)靜態方法的呼叫。
<?phpclass A { public static function who() { echo __CLASS__; //返回该类被定义时的名字 } public static function test() { self::who(); } }class B extends A { // public static function who() { // echo __CLASS__; // }} B::test(); //A?>
後期靜態綁定本想透過引入一個新的關鍵字表示運行時最初呼叫的類別來繞過限制。
簡單來說,這個關鍵字能夠讓你在上述例子中呼叫 test() 時引用的類別是 B 而不是 A。最後決定不引入新的關鍵字,而是使用已經預留的 static 關鍵字。
Example #2 static:: 简单用法<?phpclass A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // 注意使用static,后期静态绑定从这里开始 } }class B extends A { public static function who() { echo __CLASS__; } } B::test(); //B?>
在非靜態環境下,所呼叫的類別即為該物件實例所屬的類別。由於 $this-> 會在相同作用範圍內嘗試呼叫私有方法,而 static:: 則可能會給出不同結果。
另一個差異是 static:: 只能用於靜態屬性。
相關建議:
以上是【php類別與物件】後期靜態綁定的詳細內容。更多資訊請關注PHP中文網其他相關文章!