Les traits de PHP 5.4 sont une fonctionnalité nouvellement introduite, je ne sais vraiment pas comment la traduire avec précision en chinois. Son objectif réel est d'utiliser l'héritage multiple dans certaines situations, mais PHP n'a pas d'héritage multiple, donc une telle chose a été inventée.
Les traits peuvent être compris comme un ensemble de méthodes qui peuvent être appelées par différentes classes, mais les traits ne sont pas des classes ! Ne peut pas être instancié. Prenons d'abord un exemple pour examiner la syntaxe :
<?php trait myTrait{ function traitMethod1(){} function traitMethod2(){} } //然后是调用这个traits,语法为: class myClass{ use myTrait; } //这样就可以通过use myTraits,调用Traits中的方法了,比如: $obj = new myClass(); $obj-> traitMethod1 (); $obj-> traitMethod2 (); >
Ensuite, explorons pourquoi les traits sont utilisés. Par exemple, il existe deux classes, à savoir business (homme d'affaires) et individuel (individu). tous ont l'attribut d'adresse . L'approche traditionnelle consiste à faire abstraction d'une classe parent dont les deux classes ont des caractéristiques communes, telles que client, et à définir les attributs d'accès adresse, entreprise et individuel dans la classe client, en hériter respectivement. , le code suivant :
// Class Client class Client { private $address; public getAddress() { return $this->address; } public setAddress($address) { $this->address = $address; } } class Business extends Client{ //这里可以使用address属性 } // Class Inpidual class Inpidual extends Client{ //这里可以使用address属性 }
Mais que se passe-t-il s'il existe une autre classe appelée order qui doit accéder au même attribut d'adresse ? La classe de commande ne peut pas hériter de la classe client car cela n'est pas conforme aux principes de la POO. Les traits sont utiles à ce stade. Vous pouvez définir un trait pour définir ces propriétés publiques.
// Trait Address trait Address{ private $address; public getAddress() { eturn $this->address; } public setAddress($address) { $this->address = $address; } } // Class Business class Business{ use Address; // 这里可以使用address属性 } // Class Inpidual class Inpidual{ use Address; //这里可以使用address属性 } // Class Order class Order{ use Address; //这里可以使用address属性 }
C'est bien plus pratique !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!