Depuis PHP5.4.0, PHP a implémenté une méthode de réutilisation de code appelée trait
.
Comme nous le savons tous, PHP a un héritage unique et le trait est un mécanisme de réutilisation de code préparé pour les langages à héritage unique comme PHP. Les traits sont conçus pour réduire les limitations des langages à héritage unique et permettre aux développeurs de réutiliser librement des méthodes dans des classes indépendantes au sein de différentes hiérarchies. La sémantique des traits et de la composition des classes définit un moyen de réduire la complexité et d'éviter les problèmes traditionnels d'héritage multiple.
trait
est similaire à class
, mais ne combine les fonctionnalités que de manière fine et cohérente. Ne peut pas être instancié via le trait lui-même. Il ajoute une combinaison de fonctionnalités horizontales à l'héritage traditionnel ; c'est-à-dire qu'il n'est pas nécessaire d'hériter entre plusieurs classes dans une application.
Tutoriel vidéo PHP recommandé : https://www.php.cn/course/list/29/type/2.html
1. Exemple
Nous donnons d'abord un exemple pour introduire le trait, qui est similaire à la définition de classe, mais utilise le mot-clé trait definition. Utilisez des combinaisons d'utilisation dans les cours.
<?php trait T{ public function t1(){ return 't1'; } public function t2(){ return 't2'; } } class Demo{ use T; public function test(){ return 'test'; }多个 } $demo = new Demo; echo $demo->t1(),'</br>'; echo $demo->test();
Résultat de sortie :
t1
test
2. Résolution de conflits de traits multiples
Si plusieurs traits sont utilisés, mais que les noms de méthodes sont les mêmes, un conflit se produira. Vous devez spécifier manuellement quelle méthode de trait utiliser, à l'aide du mot-clé insteadof
.
<?php trait T{ public function t1(){ return 't1'; } public function t2(){ return 't2'; } } trait T2{ public function t1(){ return 't3'; } } class Demo{ use T,T2{ //使用T的m1方法 T::t1 insteadof T2; } public function test(){ return 'test'; } } $demo = new Demo; echo $demo->t1(),'</br>'; echo $demo->test();
Résultat de sortie :
t1
test
En cas de conflit, vous pouvez également utiliser use pour définir des alias de méthode pour résoudre le conflit. L'exemple est le suivant :
<?php trait T{ public function t1(){ return 't1'; } public function t2(){ return 't2'; } } trait T2{ public function t1(){ return 't3'; } } class Demo{ use T,T2{ //使用T的m1方法 T::t1 insteadof T2; T2::t1 as new_t1; } public function test(){ return 'test'; } } $demo = new Demo; echo $demo->t1(),'</br>'; echo $demo->new_t1(),'</br>'; echo $demo->test();
Résultats de sortie :
t1
t3
test
3.
Vous pouvez également utiliser le mot-clé use
pour modifier les autorisations d'accès des méthodes.
<?php trait T{ public function t1(){ return 't1'; } public function t2(){ return 't2'; } } class Demo{ use T{ t2 as protected; } public function test(){ return 'test'; } } $demo = new Demo; echo $demo->t1(),'</br>'; echo $demo->t2(),'</br>'; echo $demo->test();
Résultat de sortie :
Les connaissances ci-dessus présentent certaines fonctionnalités couramment utilisées. Pour plus de détails, veuillez vous référer au manuel officiel :
. https ://www.php.net/manual/zh/lingual.oop5.traits.php
Pour plus de questions liées à PHP, vous pouvez visiter le site Web PHP chinois : https://www.php.cn/
Merci !
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!