Que signifie le trait en php ? Une brève introduction aux traits en php

不言
Libérer: 2023-04-04 07:48:02
original
6762 Les gens l'ont consulté

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.

Que signifie le trait en php ? Une brève introduction aux traits en php

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 &#39;i can gps&#39;;
    }
}
Copier après la connexion

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 &#39;i can move&#39;;
    }
}
Copier après la connexion

Définition mobile.php :

<?php

class Mobile {
    use gps;
    public function tel() {
        echo &#39;i can tel&#39;;
    }
}
Copier après la connexion

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(&#39;gps.php&#39;);
require_once(&#39;car.php&#39;);
require_once(&#39;mobile.php&#39;);
$car = new Car();
$mobile = new Mobile();
$car->gps();
echo "\n";
$mobile->gps();
Copier après la connexion

Les résultats de sortie sont les suivants :

1 i can gps
2 i can gps
Copier après la connexion

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 &#39;i can chinae gps&#39;;
    }
}
Copier après la connexion

Introduit dans car, modifier la définition de car.php comme suit :

<?php
class Car {
    use gps, gpschina;    
    public function move() {
        echo &#39;i can move&#39;;
    }
}
Copier après la connexion

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
Copier après la connexion

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 &#39;i can move&#39;;
    }
}
Copier après la connexion

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
Copier après la connexion

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 &#39;car::gps&#39;;
    }
    

    public function move() {
        echo &#39;i can move&#39;;
    }
}
Copier après la connexion

Appelez test.php pour voir les résultats :

1 car::gps
2 i can gps
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal