Intereting Posts
PHP File_put_contents не работает PHP Замените символы umlaut для анализа XML; несколько методов не работают Проблемы с методом POST в PHP laravel возвращает строку json на локальном компьютере, но целое число на экземпляре экскаватора beanstalk Как я могу взорвать массив, пропуская пустые элементы массива? Безопасность Symfony2 @ Без комментариев аннотация не работает Slim 3 получает текущий маршрут в промежуточном программном обеспечении Захват json-данных из hubspot webhook Опубликовать массив из нескольких значений флажка Как проверить, имеет ли строка хотя бы одну букву, номер и специальный символ в php Переписать на «симпатичный URL»? twig template engine, используя статическую функцию или переменную обновление связанных таблиц в торте Простой запрос Zend Framework с методом post http Как разрешить выделение жирным шрифтом, подчеркивание и курсив в текстовой области

Допускается ли множественное наследование на уровне класса в PHP?

Допускается ли множественное наследование на уровне класса в PHP?

Множественное наследование страдает от проблемы Diamond , которая еще не была (согласована с тем, как быть) на PHP. Таким образом, в PHP нет множественного наследования .

  BaseClass /\ / \ ClassA ClassB \ / \/ ClassC 

Если и ClassA и ClassB определили свой собственный метод foo() , который вы бы назвали в ClassC ?

Вам рекомендуется либо использовать композицию объекта или интерфейсы (которые допускают множественное наследование), либо – если вы после горизонтального повторного использования – посмотрите на образец Decorator или Strategy , пока у нас не появятся Черты (или Графики или что бы они там ни назывались).

Некоторые ссылки:

  • [PHP-DEV] Черты, трансферы, горизонтальное повторное использование
  • [PHP-DEV] Наследование нескольких классов
  • RFC: Черты для PHP
  • Черты-как функциональность в PHP сейчас

PHP не поддерживает множественное наследование.

Вы можете имитировать его с помощью делегирования методов и свойств, но он не будет работать с is_a() или instanceof :

 class A extends B { public function __construct($otherParent) { $this->otherParent = $otherParent; } public function __call($method, $args) { $method = array($this->otherParent, $method); return call_user_func_array($method, $args); } } 

Нет, классы PHP могут наследовать только один класс, а не несколько.

PHP не поддерживает множественное наследование как таковое, но он обеспечивает некоторую легкость повторного использования наборов методов в нескольких независимых классах, используя traits . trait написана точно так же, как класс, но она не может быть создана сама по себе.

ниже приведены несколько примеров из руководства PHP:

Пример порядка прихода:

 class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello(); 

Вывод:

 Hello World! 

Вот еще один пример разрешения конфликтов:

 trait A { public function smallTalk() { echo 'a'; } public function bigTalk() { echo 'A'; } } trait B { public function smallTalk() { echo 'b'; } public function bigTalk() { echo 'B'; } } class Talker { use A, B { B::smallTalk insteadof A; A::bigTalk insteadof B; } } class Aliased_Talker { use A, B { B::smallTalk insteadof A; A::bigTalk insteadof B; B::bigTalk as talk; } } 

Для получения дополнительной информации и более глубокого понимания множественного вступления в PHP .

Просмотр горизонтального повторного использования для PHP

PHP не поддерживает множественное наследование для классов.