Ver Mensaje Individual
  #17 (permalink)  
Antiguo 11/02/2013, 17:27
Avatar de dashtrash
dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 8 meses
Puntos: 270
Respuesta: Nueva versión de PHP 5.4

No estoy ni a favor ni en contra.Prefiero herencia múltiple, porque es OOP. Traits no lo es.Es un paradigma distinto, y acabará mezclado.
Mira este código:
Código PHP:
Ver original
  1. trait muylisto {
  2.     public function sayHello() {
  3.         $this->myHello();
  4.     }
  5. }
  6. class prueba
  7. {
  8.     use muylisto;
  9.     private function myHello()
  10.     {
  11.        echo "HOLA";
  12.     }
  13. }
  14. $c=new prueba();
  15. $c->sayHello();
El trait "muylisto" está presuponiendo que la clase en la que se use, va a existir la función "myHello".
Ese código es perfectamente válido, y anti-OOP.
El equivalente es como si una clase base supiera a priori en qué clase va a ser usado (sin necesitar implementar un interfaz, o declarar el método como abstracto, o forzar de alguna forma a quien lo vaya a usar).
Puedes decir "bueno, sólo hay que tener cuidado, claro"...Pero, si siempre se tuviera cuidado, no haría falta ni "private","protected",etc,etc

Supongamos que la clase que usa el trait, no implementa la función.En qué momento se detectaría el problema? Cuando se ejecute el código.
En qué momento se detecta el problema de que una clase derivada no implementa un interfaz? En tiempo de parseo (a lo más que puede aspirar un lenguaje interpretado).Es una gran diferencia.

Última edición por dashtrash; 11/02/2013 a las 17:37