Le contenu de cet article porte sur ce que sont les traits en php ? Une brève introduction aux traits en php a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer, j'espère qu'elle vous sera utile.
Qu'est-ce qu'un trait ?
Regardez l'introduction du site officiel de PHP.
Depuis PHP 5.4.0, PHP implémente une méthode de réutilisation de code appelée traits.
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 de la composition des traits et des classes définit un moyen de réduire la complexité et d'éviter les problèmes typiques associés à l'héritage multiple traditionnel et aux classes Mixin.
Trait est similaire à Class, mais est uniquement conçu pour combiner des fonctionnalités 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.
Exemple 1
Les téléphones mobiles et les voitures ont des fonctions GPS. Le GPS est utilisé pour le positionnement, les fonctions doivent donc être unifiées. Les téléphones portables et les voitures n’ont pratiquement rien en commun, à l’exception de la fonctionnalité GPS, l’héritage ne peut donc pas être utilisé. Quant à l'interface, je pense que lorsque différentes classes implémentent l'interface, l'implémentation de l'interface peut être différente, mais la fonction du GPS est celle du positionnement. Utilisez donc le trait au lieu de la classe et de l'interface. C'est ce que je comprends, je ne sais pas si c'est correct.
Définition Gps.php :
<?php trait Gps { public function gps() { echo 'i can gps'; } }
Utilisant trait pour définir un trait GPS à réutiliser, son mot-clé est trait . Ensuite, référencez-le dans car.php et mobile.php.
Définition car.php :
class Car { use gps; public function move() { echo 'i can move'; } }
Définition mobile.php :
<?php class Mobile { use gps; public function tel() { echo 'i can tel'; } }
Dans car.php et mobile.php, utilisez le mot clé use Le trait de gps est introduit, afin que la méthode gps() puisse être appelée en voiture et sur mobile.
test.php pour les tests :
<?php require_once('gps.php'); require_once('car.php'); require_once('mobile.php'); $car = new Car(); $mobile = new Mobile(); $car->gps(); echo "\n"; $mobile->gps();
Les résultats de sortie sont les suivants :
1 i can gps 2 i can gps
Exemple 2
En voiture Un autre GPS produit dans le pays a été introduit.
gpschina.php est défini comme suit :
<?php trait GpsChina { public function gps() { echo 'i can chinae gps'; } }
Introduit dans car, modifier la définition de car.php comme suit :
<?php class Car { use gps, gpschina; public function move() { echo 'i can move'; } }
Appeler test.php encore une fois pour les tests, une erreur sera signalée à ce moment-là, et l'erreur est la suivante :
1 Fatal error: Trait method gps has not been applied, because there are collisions with other trait methods on Car in Car.php on line 4
Parce que dans les traits introduits, gps et gpschina ont chacun un gps, et lors de l'utilisation de $car-> ;gps() directement, il est impossible de déterminer laquelle est utilisée. La méthode gps() de gps utilise toujours la méthode gps() de gpschina, donc une erreur est signalée. Dans ce cas, nous devons en identifier un. Modifiez le fichier car.php.
<?php class Car { use gps, gpschina { GpsChina::gps insteadof Gps; } public function move() { echo 'i can move'; } }
De cette façon, la méthode GpsChina::gps est utilisée pour remplacer la méthode Gps, puis appeler test.php pour vérifier.
1 i can chinae gps 2 i can gps
De cette façon, la méthode gps() dans gpschina est appelée après $car->gps().
Exemple 3
Et s'il existe une méthode gps() dans la classe Car elle-même ? Modifiez la classe Car.
<?php class Car { use gps, gpschina { GpsChina::gps insteadof Gps; } public function gps() { echo 'car::gps'; } public function move() { echo 'i can move'; } }
Appelez test.php pour voir les résultats :
1 car::gps 2 i can gps
On peut voir que la méthode gps() de la classe Car elle-même est appelée.
Si dans une classe, la méthode héritée de la classe parent, la méthode use pour introduire le trait et la méthode de la classe elle-même ont le même nom, la méthode de la propre classe sera appelée en premier If. il n'y a pas de méthode de classe propre, la méthode use pour introduire le trait sera appelée méthode, si les deux premières ne sont pas disponibles, alors la méthode héritée de la classe parent est appelée.
Recommandations associées :
Quelle est la signification du trait en php ?
Qu'est-ce que le trait ? Partage des compétences de déclaration et d'utilisation de Trait en php
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!