Por lo que puedo decir de Scala y Hack-
Mixins:
- Puede tener estado (es decir, propiedades de instancia)
- Solo puede proporcionar métodos concretos
- Puede tener constructores, que se llaman en el mismo orden en que se mezclaron sus clases
- Si se
A
mezcla enB
yC
,A instanceof B == false
yA instanceof C == false
Rasgos:
- Solo puede proporcionar métodos, no indicar
- Puede declarar métodos abstractos, que un consumidor debe implementar
- No puede tener constructores.
- Si
A
implementa rasgosB
yC
,A instanceof B == false
yA instanceof C == false
¿Es correcto o me falta algo? ¿Estas definiciones son precisas para cualquier lenguaje OO o solo para los mencionados anteriormente?
Respuestas:
PHP no tiene el concepto de mixins, sin embargo, tiene rasgos que parecen mezcla de rasgos y mixins de hack / scala:
No creo que haya una sola cosa que funcione de la misma manera en todos los idiomas OO. Incluso algunos conceptos básicos como la herencia y las interfaces tienen algunas variaciones, sin mencionar construcciones más borrosas como rasgos / mixins.
fuente
Los rasgos son el acceso estático en PHP como lo explicó Benjamin Eberlei en su blog . Son similares a copiar y pegar código automáticamente.
Esto no significa que los rasgos sean absolutamente malos, pero la mayoría de las veces imponen problemas de acoplamiento.
Mixin en general es el uso habitual (algo seguro) de herencia múltiple. Los idiomas con herencia múltiple y mecanografía by-ref (duck) como Python ofrecen usos elegantes para mixins.
fuente