2012-02-29 1 views
6

Possible en double:
traits in php – any real world examples/best practices?Quels sont les scénarios d'utilisation possibles pour Traits en PHP?

Dans quel genre de situations peut-on utiliser en PHP caractères? J'en ai une très bonne idée générale, mais je n'arrive pas à penser à un moyen de les utiliser dans une application que j'ai écrite, mais c'est peut-être parce qu'il n'a pas besoin de traits à ce moment-là.

Un scénario que je me suis rendu compte qui a besoin de traits:

  • Événements. Au lieu d'avoir une classe qui implémente le modèle d'observateur et en laissant toutes les autres classes en hériter, faites-en un trait et laissez les classes qui veulent déclencher des événements ou s'abonner pour utiliser le trait. Par exemple, le framework Yii se comporte mal en implémentant des éléments dans la classe CComponent plutôt que d'utiliser un trait.

Fondamentalement, les fonctionnalités qui peuvent être partagées entre les classes, mais qui peuvent se propager le long de plusieurs hiérarchies de classes, doivent utiliser des traits. Quels autres scénarios pourraient tirer parti des Traits qu'un système d'événements?

Répondre

-4

Le problème que Traits adresse est similaire à celui que les adresses Java avec des interfaces - comment appliquer un comportement commun (représenté par des interfaces) entre les classes qui ne sont pas dans la même hiérarchie de classe.

Avec des langages tels que C++ qui ont seulement un héritage, pour deux objets de deux classes différentes à utiliser dans le même contexte nécessitant le même comportement, les deux classes devaient appartenir à la même hiérarchie. Cela signifiait parfois créer des hiérarchies assez artificielles simplement pour permettre à des objets de différentes classes d'être utilisés dans le même contexte. Java a abordé ce problème par le biais d'interfaces - une interface est essentiellement un contrat régissant la fourniture d'un comportement de sorte qu'un objet d'une classe peut être substitué à un objet d'une classe séparée parce qu'il promet le même comportement - l'interface. Mais ils ne doivent pas nécessairement provenir de la même hiérarchie.

PHP Traits incarnent cette idée. Un trait est une sorte d'interface, un ensemble de comportements qu'une classe contient afin qu'elle puisse être utilisée dans un contexte qui nécessite ce comportement. Ainsi, tout exemple d'interface Java doit être reporté sur un exemple PHP Traits. Les Traits PHP sont un peu différents des interfaces Java, car les Traits peuvent contenir des définitions de fonctions complètes, tandis que les interfaces Java ne peuvent contenir que des déclarations (idiosyncrasie typique de PHP!)

+6

PHP a aussi [interfaces] (http://php.net /manual/en/language.oop5.interfaces.php), séparément des traits ...! Si vous voulez comparer des pommes à des pommes, les traits sont comme des mixins de langues telles que Ruby ou, bien, des traits de langues comme Self. – deceze

+3

Je ne pense pas que les interfaces aient beaucoup à faire avec les traits. – Tower

+0

Je vais juste laisser ceci ici http://compsci.ca/v3/viewtopic.php?t=14785 –

Questions connexes