Pelo que posso dizer de Scala e Hack-
Mixins:
- Pode ter estado (por exemplo, propriedades da instância)
- Só pode fornecer métodos concretos
- Pode ter construtores, chamados na mesma ordem em que suas classes foram misturadas
- Se
A
misturarB
eC
,A instanceof B == false
eA instanceof C == false
Traços:
- Só pode fornecer métodos, não declarar
- Pode declarar métodos abstratos, que um consumidor deve implementar
- Não pode ter construtores
- Se
A
implementa característicasB
eC
,A instanceof B == false
eA instanceof C == false
Isso está correto ou estou faltando alguma coisa? Essas definições são precisas para qualquer idioma OO ou apenas para os mencionados acima?
Respostas:
O PHP não possui o conceito de mixins, no entanto, possui características que se parecem com mix de características e mixins do hack / scala:
Não acho que exista uma única coisa que funcione da mesma maneira em todos os idiomas OO. Mesmo alguns princípios básicos, como herança e interfaces, têm algumas variações, sem mencionar construções mais desfocadas, como características / mixins.
fonte
Traços são acesso estático no PHP, conforme explicado por Benjamin Eberlei em seu blog . Eles são semelhantes à cópia e colagem automatizada de código.
Isso não significa que as características sejam absolutamente más, mas na maioria das vezes impõem problemas de acoplamento.
Mixin em geral é o uso usual (um tanto seguro) de herança múltipla. Idiomas com herança múltipla e digitação by-ref (duck) como Python oferecem usos elegantes para mixins.
fonte