關於後期靜態繫結
看了php手冊中關於後期靜態繫結,還是不太明白,原文地址http://cn2.php.net/manual/zh/language.oop5.late-static-bindings.php
其中第四個例子
PHP code
結果是:
A
C
C
當調用到parent::foo()和self::foo()時,為什麼會調用C類的who()?
哪位朋友能解釋一下,謝謝。
------解決方案--------------------
關於static操作符的解釋:
後期靜態繫結試圖通過引入一個關鍵字表示運行時最初調用的類來繞過限制。
而這個最初調用的類就是C
A::foo(); 調用的是A類的方法,這你明白
self::foo(); // 這個self實際上是C類。明白嗎? C::test() C繼承了B的test()方法
parent::foo(); // 由於static::who(); 而不是self::who()。該方法調用的當前的類,也就是C類的foo()方法
也許你覺得還是弄不懂 A類中又為什麼沒有調用C的who()方法,這是由於parent的特殊關係。延遲靜態繫結就是專門為瞭解決子類與父類間繼承方法的問題才出現的。
------解決方案--------------------
手冊不是說得很清楚麼
------------------------------------------------------
”後期綁定“的意思是說,static::不再被解析為定義當前方法所在的類,而是在實際運行時計算的。也可以稱之為”靜態繫結“,因為它可以用於(但不限於)靜態方法的調用。
-------------------------------------------------------
#1說的有個小問題
PHP code
self::foo(); // 這個self實際上是C類。明白嗎? C::test() C繼承了B的test()方法