2013-12-12 157 views
-1

我正在嘗試做點什麼,顯然我似乎錯過了一些東西。我對這件事感到抱歉。PHP:我如何從父類變量訪問子類功能?

class PARENT_API { 
    function __construct() { 

    } 
} 
$api = new PARENT_API(); 

class common extends PARENT_API { 
    function foo(){ 
     return 'Test!'; 
    } 
} 

爲什麼我不能這樣做?

echo $api->common->foo(); 

我只是想把大代碼組織成類,我不能這樣做,我失蹤了嗎?

+1

如果父母需要訪問子功能,那麼你正在做OOP錯誤。 http://en.wikipedia.org/wiki/Liskov_substitution_principle –

+0

我看過插件。 $ parent-> childclass-> function()或變量。我可以忽略一些東西嗎 – user2780294

+0

這不是你如何做OOP在PHP(或任何其他語言我知道)。請閱讀http://www.php.net/manual/en/language.oop5.inheritance.php –

回答

0

您需要訪問foo()方法這樣

$api_1 = new common(); 
$api_1->foo(); 

我看到插件這樣做。 $ parent-> childclass-> function()或變量。 我可以俯視嗎?

我真的懷疑這一點。我不認爲父母可以繼承孩子。

0

別的之前,你的子類的功能是這樣的:

class common extends PARENT_API { 
    function foo(){ 
     echo 'Test!'; 
    } 
} 

但你在呼喚它:

echo $api->common->foo(); 

兩個echo的?更改類函數將此所以返回的輸出:當你做一個class common extends PARENT_API要創建一個新的common

$api_common = new common(); 
echo $api_common->foo(); 

編輯

class common extends PARENT_API { 
    function foo(){ 
     return 'Test!'; 
    } 
} 

而且,它應該被稱爲。所以你不能打電話PARENT_API,然後期望它神奇地延長。您需要致電common

+0

所以沒有辦法獲得foo()而不調用子類new Child()? – user2780294

+0

不需要看我編輯的答案。你不能做你所描述的。 – JakeGould

1

我認爲你是混亂的依賴和可擴展性...

依賴:父對象可能需要一個子對象覆蓋它在執行某些操作。它還允許您輕鬆切換子對象並更改父對象的操作方式。

可擴展性:子類可以從父類繼承。它可以說,BClass也是一個AClass,可以做同樣的事情,但略有不同。只有BClass才能評估AClass,因爲BClass也是一個AClass,但事實並非如此!

這是你的意思嗎?