Разрешено ли множественное наследование на уровне класса в PHP?
разрешено ли множественное наследование на уровне класса в PHP?
4 ответов
множественное наследование страдает Проблема, который еще не был (согласован) решен в PHP. Таким образом, в PHP нет множественного наследования.
BaseClass
/\
/ \
ClassA ClassB
\ /
\/
ClassC
если как ClassA
и ClassB
определили свой собственный метод foo()
, который бы вы позвонили в ClassC
?
рекомендуется использовать объект состава или интерфейсы (которые позволяют множественное наследование) или - если вы после горизонтального повторного использования-посмотрите в оформителя или стратегия модель, пока у нас есть черт (или Лоскутов или как они будут называться тогда).
Ссылка:
вы можете имитировать его с помощью метода и делегирования свойств, но он не будет работать с is_a()
или instanceof
:
class A extends B
{
public function __construct($otherParent)
{
$this->otherParent = $otherParent;
}
public function __call($method, $args)
{
$method = [$this->otherParent, $method];
return call_user_func_array($method, $args);
}
}
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;
}
}
для получения дополнительной информации и более глубокого понимания несколько Inhertance в PHP.
посмотреть в горизонтальное повторное использование для PHP
нет, PHP не поддерживает множественное наследование.
чтобы разрешить эту функцию в PHP, вы можете использовать интерфейсы или использовать "черты" вместо классов.
PHP 5.4.0 поставляется с признаками, которые будут выполнять ограничение множественного наследования. Подробнее о чертах из приведенной ниже ссылки: