¿Se permite la herencia múltiple a nivel de clase en PHP?¿Se permite la herencia múltiple a nivel de clase en PHP?
Respuesta
Herencia múltiple sufre de Diamond Problem, que aún no se ha acordado (cómo se resuelve) en PHP. Por lo tanto, no hay herencia múltiple en PHP.
BaseClass
/\
/\
ClassA ClassB
\/
\/
ClassC
Si tanto ClassA
y ClassB
define su propio método foo()
, que se podría llamar en ClassC
?
Se le anima a cualquiera utilizar object composition o interfaces (que sí permiten herencia múltiple) o - si usted está después de reutilización horizontal - mirar en el patrón Decorator o Strategy hasta que tengamos Traits (o Grafts o lo que serán llamados a continuación,)
Algunos Referencia:
Excelente descripción Gracias Gordon !!! –
wooooooo, gráficos! +1. –
PHP no es compatible con herencia múltiple.
PHP no es compatible con herencia múltiple para las clases.
"No admite herencia múltiple"? Entonces, eso significa que sí, ¿no? –
¿No debería haber corregido esto ahora? – mega6382
No, clases PHP sólo pueden heredar una clase, no múltiple.
puede imitar usando el método y la propiedad delegación, pero no va a trabajar con is_a()
o 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);
}
}
PLs elaborados Dindt entendió el punto que está hablando de ... –
¿Qué punto? ¿El punto is_a? ¿O la delegación? –
Both Pls eloborate Both point, soy un nuevo codificador que no conoce estos conceptos –
PHP no soporta la herencia múltiple como tal, pero proporciona cierta facilidad para reutilizar conjuntos de métodos en múltiples clases independientes, usando traits
. Un trait
se escribe como una clase, pero no se puede crear una instancia por sí mismo.
a continuación son un par de ejemplos de PHP Manual:
Precedencia Ejemplo de pedido:
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();
Salida:
Hello World!
Aquí es otro ejemplo con la resolución de conflictos:
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;
}
}
Para obtener más información y una comprensión más profunda de Multiple Inhertance en PHP.
Mira en Horizontal Reuse for PHP
- 1. Herencia múltiple en PHP
- 2. Herencia múltiple en java
- 3. Herencia múltiple sin herencia múltiple y sin duplicación de código
- 4. Herencia de clase de tipo herencia múltiple en ruby
- 5. clase abstracta + + mixin herencia múltiple en Python
- 6. Python La herencia múltiple
- 7. Codeigniter y Herencia Múltiple?
- 8. ¿Por qué no se permite la herencia múltiple en Java o C#?
- 9. Documentar la herencia múltiple de PHP con PhpDoc
- 10. No se puede lanzar una clase con herencia múltiple
- 11. casting con la herencia múltiple
- 12. Herencia de Interfaz Múltiple
- 13. La herencia múltiple: 2Classes1Method
- 14. Herencia múltiple: tamaño de la clase para punteros virtuales?
- 15. vb.net: la herencia múltiple en una interfaz
- 16. Sqlalchemy: evitar la herencia múltiple y tener clase base abstracta
- 17. La herencia múltiple fundición de clase base a diferente clase derivada
- 18. Herencia múltiple en C#
- 19. ¿Cómo se implementa la herencia múltiple de C++?
- 20. Herencia múltiple en ActionScript 3
- 21. C++: La herencia múltiple con polimorfismo
- 22. Java: ¿cómo se llama a esta ambigüedad de herencia múltiple?
- 23. ¿Es la herencia múltiple mal?
- 24. Herencia virtual pura, herencia múltiple, y C4505
- 25. C++ herencia múltiple fundición
- 26. C++ Herencia virtual múltiple frente a COM
- 27. Herencia múltiple de Objective-C
- 28. problema de herencia múltiple en C#
- 29. herencia múltiple Extjs?
- 30. cómo simular la herencia múltiple en C#
duplicado Posible, http: // stackoverflow.com/questions/90982/multiple-inheritance-in-php –
Creo que la respuesta aceptada debería cambiar aquí, porque hay una solución alternativa para 'inheritance multiple' en PHP. Que se describe en [esta respuesta] (https://stackoverflow.com/a/46905316/2394254) pero no en la respuesta aceptada. – mega6382