2013-12-16 59 views
3

我想了解如何在PHP中使用類層次結構。在Java編程中我將能夠做這樣的事情:瞭解PHP類層次結構和鑄造

public class ClassOne extends SuperClass{ 

} 

public class ClassTwo extends SuperClass{ 

} 

public class SuperClass{ 

} 

現在,當我實例化一個對象作爲unknownclass = new SuperClass();我會那麼可以將此unknownclass投射到任何它在旅途中擴展了類。

我的問題是如何適用於PHP?你如何使用它?

+1

呃,你不能改變對象本身。你可以寫'unknownclass = new ClassOne();'。但我認爲這不是你的問題,也許你可以澄清? – Haneev

+0

也許你可能會考慮使用接口。 http://www.php.net/manual/en/language.oop5.interfaces.php爲了什麼是值得的,我向Daily WTF提交了一些代碼,我發現了一段時間,有人序列化了一個對象,用正則表達式來改變它類名稱,並將其反序列化爲其他內容。這是一場噩夢。 – Brad

+2

可能[this](http://stackoverflow.com/questions/8542661/general-polymorphism-with-php-examples)可以提供幫助。 –

回答

0

多態性的主要好處是能夠爲通用需求傳遞特定的東西,只要具體事物能夠響應通用需求。因此,鑑於以下通用要求:

public function doSomethingWith(Superclass obj)

你可以傳遞的Superclass或任何其子類的實例來doSomethingWith。但爲了這是有用的和「安全的」,Superclass的子類需要實現至少Superclass相同的公共成員。所以如果Superclass有一個方法execute,ClassOneClassTwo需要有相同的方法,要麼繼承Superclass的實現,要麼重寫它並定義一個新的實現,只要重寫的方法具有相同的(或多態的兼容)簽名。這給了你很大的行爲靈活性,因爲相同通用需求的不同實現可能會產生變化。

+0

你誤解了多態現象 – hek2mgl

+0

@ hek2mgl你願意告訴我怎麼做? –

+0

首先,是AFK,對於遲到的迴應感到抱歉。我閱讀了一些關於該主題的內容,似乎我的評論有誤,但是您的答案並未完整。首先,如果你可以稍微編輯一下這個帖子會很好,因爲那樣會讓我刪除downvote,因爲它沒有錯。我只是想了解基於方法的多態性,這意味着使用不同參數集的方法相同。但是,在談論多態時,這種類型不應該被遺忘 – hek2mgl