2016-09-01 4 views
1

У меня есть два класса с именем RA_Shortcode и WPBakeryShortCodesContainerКак иметь множественное наследование PHP

Теперь мне нужен RA_ShortcodeContainer третий класс наследует оба класса ..

Любая идея, как достичь этого.

Заранее спасибо

+1

PHP не допускает множественного наследования для одного класса. Возможно, вы захотите найти Черты как среднюю площадку. –

+1

От имени я бы ожидал, что 'WPBakeryShortCodesContainer' будет содержать коллекцию записей RA_Shortcode, так же как RA_ShortcodeContainer может расширять' WPBakeryShortCodesContainer' (или наоборот), но не может понять, почему Контейнеру необходимо расширить класс, который является контейнером для –

+0

WPBakeryShortCodesContainer является сторонним классом, а RA_Shortcode является нашим, который сокращает наши строки кода, который мы кодируем для каждого проекта, так же, как и для RA_ShortcodeContainer, и нужен основной код из RA_Shortcode, поэтому я не хочу писать их снова в RA_ShortcodeContainer –

ответ

0

Там в настоящее время нет способа реализовать множественное наследование с PHP. Вы можете использовать Traits для достижения того, чего вы пытаетесь выполнить или включить класс (ы) с требованием, включать или использовать инструкции (или инъекции зависимостей). Тем не менее, черты кажутся лучшим и самым прямым способом.

+0

Почему черты кажутся лучшими? Что такого прямолинейного в использовании черт? – dbf

+0

@dbf - Поскольку множественное наследование невозможно с помощью метода '' 'extends''' в PHP - единственный реальный способ выполнить то, что пытался сделать оригинальный автор (и с наименьшим количеством кода), - использовать Черта. Концепция «Трейт» - это общий код. В PHP-документах: «Черты - это механизм повторного использования кода на языках единого наследования, таких как PHP. Цель - уменьшить некоторые ограничения одиночного наследования, позволяя разработчику свободно использовать множество методов в нескольких независимых классах, живущих в разные иерархии классов ". –

+0

пример с кодом уточнит его больше. –

1

Короткий ответ: Вы не.


на основе ваших имен классов (кстати, посмотреть концепцию namespaces), то не нужно даже для нескольких наследств.

Если класс B наследуется от класса A, это означает, что класс A является специализированным случаем B.

Возможно, это проиллюстрирует вашу ситуацию. Допустим, у вас есть классы Box и Cat. И теперь вам нужен специализированный класс BoxForCats. BoxForCats должен никогда не распространяется от Cat. Вместо этого вы должны применять композиции.

Ваш RA_ShortcodeContainer класс должен просто:

public function addShortcode(RA_Shortcode $shortcode) 
{ 
    $this->list[] = $shortcode; 
} 

P.S. read up about LSP

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