2013-12-16 4 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

Может быть [это] (http://stackoverflow.com/questions/8542661/general-polymorphism-with-php-examples) может помочь. –

ответ

0

Основным преимуществом полиморфизма является способность передавать что-то конкретное для общего требования при условии, что конкретная вещь отвечает на общее требование. Таким образом, учитывая следующее общее требование:

public function doSomethingWith(Superclass obj)

вы можете передать экземпляр Superclass или любого из его дочерних классов doSomethingWith. Но для того, чтобы это было полезно и «безопасно», дочерние классы Superclass должны реализовать не менее теми же общественными членами, что и Superclass. И так, если Superclass имеет метод execute, ClassOne и ClassTwo должен иметь тот же метод, либо путем наследования реализации Superclass, либо путем переопределения его и определения новой реализации, если переопределенный метод имеет то же (или полиморфно совместимая) подпись. Это дает вам большую гибкость в поведении, поскольку различные реализации одного и того же общего требования могут приводить к изменениям.

+0

Вы неправильно поняли полиморфизм – hek2mgl

+0

@ hek2mgl Не могли бы вы рассказать мне, как? –

+0

Во-первых, был АФК, извините за поздний ответ. Я прочитал кое-что о этой теме, кажется, что я ошибаюсь в своем комментарии, но вы не удовлетворены своим ответом. Во-первых, было бы неплохо, если бы вы могли отредактировать сообщение немного - просто потому, что тогда SO позволил бы мне удалить нижний предел, потому что это не так. Я имел в виду только полиморфизм, основанный на методе, имея в виду тот же метод с другим набором аргументов. Однако этот тип не следует забывать, говоря о полиморфизме – hek2mgl

Смежные вопросы