Ver Mensaje Individual
  #15 (permalink)  
Antiguo 11/02/2013, 17:08
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, 7 meses
Puntos: 270
Respuesta: Nueva versión de PHP 5.4

Cita:
Iniciado por GatorV Ver Mensaje
El problema de la herencia múltiple y que estoy de acuerdo es cuando los métodos se llaman igual, entras en ambigüedad, aparte de que muchos programadores inexpertos empiezan a hacer cosas muy bizarras, es un arma de dos filos.

Pero es mejor tener la opción, a no tenerla
Pero ese problema también existe con traits.Solución: meter sintaxis para solucionar la ambiguedad.
Y, en ese sentido, no me gusta demasiado la sintaxis que usa PHP.Me parece algo completamente "fuera" del lenguaje.Es una construcción extraña.Hay ya elementos de resolución de ámbito en cosas como llamadas estáticas, constantes, etc..podrían haber usado algo de ese tipo, en vez de un bloque "ad-hoc"..
Y..si la herencia múltiple permite hacer cosas bizarras..Prepárate con los traits..Ten en cuenta que la única diferencia entre traits y herencia múltiple, es la forma de resolución de la herencia.El resto, es igual..Todas las barbaridades posibles con herencia múltiple, son posibles con traits.
Pero, digo que prefiero herencia múltiple, porque al ser un paradigma de OOP, uno hereda una clase diseñada con los criterios de encapsulación y visibilidad propios de OOP.
Con traits, no.Es la clase que usa un trait, la que define su visibilidad.Y, a la vez, un trait "ve" las variables privadas de la clase en la que se usa (!!! puerta abierta al desastre), con lo cual, no existe concepto de encapsulación y/o visibilidad impuesto por el código heredado.
Tú puedes hacer un trait que mantenga el estado interno de un proceso, "pensando" que los métodos que hagas, van a ser privados, y eso es uno de los pilares de la OOP.
Pero un trait no es OOP..nada impide que otra clase los importe como públicos..
Y, ya que un trait tiene visibilidad sobre variables y métodos que no posee, ya estoy viendo traits "suponiendo" que van a ser importados por la clase A y B, que tienen esas ciertas variables o métodos..Pero cuando lo importas desde C....

Yo programo OOP, que la prefiero a AOP...Y creo que es importante mantener el paradigma..La gente al final lo usará como "feature", sin decidir si su modelo de programación va a ser OOP o AOP...
Vamos..Que la programación bizarra posible con traits, no es para nada inferior a la posible con herencia multiple..