使用PHP 5.3+和有得等於下面我得到的「C」的輸出,而不是「B」:PHP:get_called_class()返回意外值
class A
{
public static function doSomething()
{
echo get_called_class();
}
}
class B extends A
{
public static function doMore()
{
self::doSomething();
}
}
class C extends B {}
C::doMore();
如果我用靜態:: doSomething()將會是預期的結果,但是當使用self :: doSomething()時,我期望這個方法在B的範圍內被調用,因爲它是'self'被定義的地方,而不是後期的靜態綁定。
這是如何解釋,以及如何在doSomething()方法中獲得'B'?
由於提前,JS
使用父代並不能解決問題,因爲get_called_class()仍然返回'C',但在這種情況下我需要'B'。即使使用B :: doSomething也會給我一個'C'作爲輸出。 – 2012-04-18 15:42:00
J.S.我剛剛在PHP 5.4上測試過。它的返回'C' – Starx 2012-04-18 15:54:07
感謝您的測試,這就是我的預期。但是我需要'B'在那個地方,我可以使用什麼來代替get_called_class來實現(除了回溯)? – 2012-04-18 16:08:04