2011-09-06 36 views
0

如果影響,我在建這個調用類的名字:PHP:使用繼承功能,從擴展的類

Class Foo { 
     $bar = new Bar(); 
     protected function Spoon() { 
     get_class($this); 
     } 
    } 

    Class Bar extended Foo { 
     $this::Spoon(); //Should show "Bar", but instead shows "Foo" 
    } 

我希望能夠找到「酒吧」從勺(),但我總是得到父類。 我有點迷路了。我怎樣才能讓這段代碼正常工作?

+0

的功能,您可以重新制定的例子有一個有效的PHP程序(或片斷)? – Artefacto

+0

是'Foo :: Spoon()'是靜態的還是對它的函數調用不正確。看來你正在將Paamayim Nekudotayim(::)與'$ this->'混合在一起。而且,代碼不能在函數的主體中執行。它需要放在一個位置(如'__construct'或),然後調用(或用'new Bar();')實例化。 –

回答

1

get_class()返回'Foo',因爲由於Spoon()方法是繼承的,所以它在Foo類中執行。 使用__CLASS__常數而不是get_class()應該按照您的要求工作。

1

嘗試:

echo parent::Spoon(); 

這將迫使它在父類(Foo)的範圍內引用。你也可以使用get_parent_class()Bar

echo get_parent_class('Bar'); 
+0

你的代碼充滿語法錯誤.. – Rijk

+0

@Rijk是的。我的間歇性編輯創建了一兩個。他們現在走了。 –

+0

所以是我的downvote :) – Rijk

1

您可以使用後期靜態綁定(PHP> = 5.3),如in this answer

protected function Spoon() { 
    get_called_class($this); 
} 

或致電與

$this->Spoon(); 
+0

我不相信靜態是這裏的問題。他發佈的代碼只是我認爲的僞代碼。 – Rijk