2012-02-29 16 views
6

Duplicar posible:
traits in php – any real world examples/best practices?¿Cuáles son los posibles escenarios de uso para Rasgos en PHP?

En qué tipo de situaciones sería uno Rasgos utilizar en PHP? Tengo una idea general bastante buena de esto, pero parece que no puedo pensar en una forma de usarlos en una aplicación que he escrito, pero puede ser porque no necesita rasgos en ese momento.

Un escenario me he dado cuenta de que hay rasgos:

  • Eventos. En lugar de tener una clase que implemente el patrón de observador y dejar que todas las demás clases lo hereden, simplemente conviértalo en un rasgo y deja que las clases que quieran disparar eventos o se suscriban utilicen el rasgo. Por ejemplo, el marco Yii lo está haciendo mal implementando cosas en la clase CComponent en lugar de usar un Rasgo.

Básicamente, la funcionalidad que puede compartirse entre clases, pero que puede extenderse a lo largo de jerarquías de clases múltiples, debe usar rasgos. ¿Qué otros escenarios podrían aprovechar los Rasgos que un sistema de eventos?

Respuesta

-4

El problema de que las direcciones de características es similar a la que maneja Java con las interfaces: cómo imponer un comportamiento común (representado por interfaces) entre las clases que no están en la misma jerarquía de clases.

Con lenguajes como C++ que solo tienen herencia, para que dos objetos de dos clases diferentes se usen en el mismo contexto y requieran el mismo comportamiento, las dos clases tenían que ser de la misma jerarquía. Esto a veces significaba crear jerarquías bastante artificiales simplemente para permitir el uso de objetos de diferentes clases en el mismo contexto.

Java abordó este problema a través de interfaces - una interfaz es esencialmente un contrato que rige la provisión de comportamiento para que un objeto de una clase pueda sustituir a un objeto de una clase separada porque promete el mismo comportamiento: la interfaz. Pero no tienen que ser de la misma jerarquía.

Rasgos de PHP encarnan esta idea. Un rasgo es un tipo de interfaz, un conjunto de comportamientos que una clase contiene para que pueda usarse en un contexto que requiera ese comportamiento. Por lo tanto, cualquier ejemplo de interfaz Java debe trasladarse a un ejemplo de Rasgos de PHP. Sin embargo, los Rasgos PHP son un poco diferentes a las interfaces Java, ya que los Rasgos pueden contener definiciones de funciones completas, mientras que las interfaces Java solo pueden contener declaraciones (idiosincrasia PHP típica)

+6

PHP también tiene [interfaces] (http://php.net /manual/en/language.oop5.interfaces.php), ¡por separado de los rasgos ...! Si desea comparar manzanas con manzanas, los rasgos son como mixins de idiomas como Ruby o, bueno, rasgos de idiomas como Self. – deceze

+3

No creo que las interfaces tengan mucho que ver con los rasgos. – Tower

+0

Voy a dejar esto aquí http://compsci.ca/v3/viewtopic.php?t=14785 –

Cuestiones relacionadas