2012-04-11 78 views
0

我有一個類,名爲A.我有另一個名爲B的類擴展A. 我必須實例化A,而不是B,但我需要使用方法B也是。我怎樣才能做到這一點?PHP:實例化一個類並使用另一個類的方法

Class A 
{ 
    public function foo() { } 
} 

Class B extends A 
{ 
    public function bar() { } 
} 

$a = new A(); 
$a->bar(); 

我知道這是不可能的,但我需要一個解決方案。

PS:我希望這個問題的標題是正確的。

+0

爲什麼你不能實例化'B'?我認爲這存在你的實際問題。 – Bazzz 2012-04-11 10:48:55

+2

我的印象是這是一個設計問題,而不是語法問題。 – 2012-04-11 10:53:18

+0

小心闡述爲什麼你不能實例化B? – 2012-04-11 10:54:14

回答

-1

B中的方法可以變成靜態的嗎?

Class A 
{ 
    public function foo() { } 
} 

Class B extends A 
{ 
    public static function bar2() { } 
} 

$a = new A(); 
$a->bar(); 
B::bar2(); 

顯然它的名字有點不同,因爲B :: bar()重載了A :: bar()實現。

我想你可能會讓你的結構略微偏離。嘗試將您想要的作爲可重用的代碼片段抽象到自己的例程中。

1
$a = new A(); 
$a->bar(); 

會給你致命的錯誤。因爲bar()不是類A的方法。 所以你不能用A這個類的對象來調用它。

這將很好地工作:

Class A 
{ 
    public function foo() { } 
} 

Class B extends A 
{ 
    public static function bar() { } 
} 

$a = new A(); 
B::bar(); 
0

我想,你只是誤解了PHP的語法(Which can be rather confusing sometimes

extends關鍵字不延長父類(A),但確實創建了一個新類B,它是A的子項。 B繼承A的方法,但A本身沒有改變。

相關問題