У меня есть два класса с именем RA_Shortcode и WPBakeryShortCodesContainerКак иметь множественное наследование PHP
Теперь мне нужен RA_ShortcodeContainer третий класс наследует оба класса ..
Любая идея, как достичь этого.
Заранее спасибо
У меня есть два класса с именем RA_Shortcode и WPBakeryShortCodesContainerКак иметь множественное наследование PHP
Теперь мне нужен RA_ShortcodeContainer третий класс наследует оба класса ..
Любая идея, как достичь этого.
Заранее спасибо
Там в настоящее время нет способа реализовать множественное наследование с PHP. Вы можете использовать Traits для достижения того, чего вы пытаетесь выполнить или включить класс (ы) с требованием, включать или использовать инструкции (или инъекции зависимостей). Тем не менее, черты кажутся лучшим и самым прямым способом.
Почему черты кажутся лучшими? Что такого прямолинейного в использовании черт? – dbf
@dbf - Поскольку множественное наследование невозможно с помощью метода '' 'extends''' в PHP - единственный реальный способ выполнить то, что пытался сделать оригинальный автор (и с наименьшим количеством кода), - использовать Черта. Концепция «Трейт» - это общий код. В PHP-документах: «Черты - это механизм повторного использования кода на языках единого наследования, таких как PHP. Цель - уменьшить некоторые ограничения одиночного наследования, позволяя разработчику свободно использовать множество методов в нескольких независимых классах, живущих в разные иерархии классов ". –
пример с кодом уточнит его больше. –
Короткий ответ: Вы не.
на основе ваших имен классов (кстати, посмотреть концепцию 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
PHP не допускает множественного наследования для одного класса. Возможно, вы захотите найти Черты как среднюю площадку. –
От имени я бы ожидал, что 'WPBakeryShortCodesContainer' будет содержать коллекцию записей RA_Shortcode, так же как RA_ShortcodeContainer может расширять' WPBakeryShortCodesContainer' (или наоборот), но не может понять, почему Контейнеру необходимо расширить класс, который является контейнером для –
WPBakeryShortCodesContainer является сторонним классом, а RA_Shortcode является нашим, который сокращает наши строки кода, который мы кодируем для каждого проекта, так же, как и для RA_ShortcodeContainer, и нужен основной код из RA_Shortcode, поэтому я не хочу писать их снова в RA_ShortcodeContainer –