Comment réutiliser efficacement le code PHP - Introduction aux traits PHP
- 4282
- 493
- Noa Faure
Développé à l'origine par Rasmus Lerdorf
En 1994, PHP est l'un des langages de programmation à usage général les plus utilisés. Né à l'origine comme langue de modèle, au cours des années, il est devenu un langage entièrement entièrement Pavillon
(Programmation orientée objet) Support. Sa dernière incarnation, 7.X
, introduit de nouvelles fonctionnalités comme Déclaration de type de retour
pour les fonctions et les énormes améliorations des performances. PHP est un héritage unique
Langue: cela signifie qu'une classe ne peut hériter que pour un parent ou une classe de base. Pour surmonter ce problème, une fonctionnalité a été introduite dans la langue: caractéristiques
. Dans cet article, nous verrons comment l'utiliser et comment cela fonctionne.
Dans ce tutoriel, vous apprendrez:
- Comment utiliser les traits en php
Exigences et conventions logicielles utilisées
Catégorie | Exigences, conventions ou version logicielle utilisée |
---|---|
Système | Indépendant du SO |
Logiciel | Php |
Autre | Connaissance de PHP et concepts de programmation orientée objet de base |
Conventions | # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier |
Présentation des traits
PHP est un langage d'héritage unique: une classe d'enfants ne peut hériter que d'un seul parent seul . Cela pourrait poser un problème en termes de réutilisation du code, si la classe doit hériter de plusieurs comportements: caractéristiques
sont un moyen de résoudre ce problème. Voyons comment. La façon dont nous créons un trait est très similaire à la façon dont nous créons une classe, mais l'une des grandes différences entre les traits et les classes est qu'un trait ne peut pas être instancié, mais ne peut être utilisé que dans une classe ou à l'intérieur d'un autre trait. Créer un trait c'est facile:
Copie Le code contenu à l'intérieur de «Traiton» est très trivial: il enregistre simplement un message. Voyons comment nous pouvons l'utiliser à l'intérieur d'une classe:
Class Test Utilisez TraitOne;
Copie La clé ici est le utiliser
mot-clé, que, lorsqu'il est utilisé à l'intérieur d'une classe, «importe» les fonctionnalités regroupées dans le trait. Il est difficile d'imaginer un cas dans lequel la classe que nous avons créée ci-dessus pourrait être utile, car elle n'a pas de méthodes ou de propriétés. Étant donné que la classe utilise le trait «traitone», nous pouvons cependant accéder à la méthode «journal»:
$ test = nouveau test (); $ test-> log (); "Je suis une méthode de traiton!"
Copie C'était assez facile, mais ce qui se passe lorsqu'une classe a déjà une méthode avec le même nom de celle incluse dans le trait qu'il utilise ? Voyons-le. Nous ajoutons une méthode «journal» à l'intérieur de la classe de test:
Class Test Utilisez TraitOne; Fonction publique log () echo "Je suis une méthode de la classe de test!";
Copie Si nous appelons maintenant la méthode «journal», nous obtenons un résultat différent:
$ test = nouveau test (); $ test-> log (); "Je suis une méthode de la classe de test!"
Copie Et si la classe de test n'avait pas de méthode de «journal», mais l'a héritée d'une classe de base qu'il étendait? Voyons:
Classe Base public Fonction Log () Echo "Je suis une méthode de la classe de base!"; Class Test étend la base Utiliser TraitOne; $ test = new Test (); $ test-> log ();" Je suis une méthode de traitone!"
Copie Comme vous pouvez le voir, nous avons eu «Je suis une méthode de traitone!«À la suite de l'appel de la méthode du journal. Cela signifie que le Base
La méthode de classe a été remplacée par celle à l'intérieur du trait. La hiérarchie à garder à l'esprit ici est simple. À l'intérieur d'une classe:
- Les traits remplacent les méthodes héréditaires;
- Les méthodes de classe actuelles remplacent les méthodes de trait;
En utilisant plusieurs traits
À l'intérieur d'une classe, nous pouvons utiliser plusieurs traits: tout ce que nous avons à faire, c'est les inclure après le utiliser
mot-clé, séparé par une virgule:
Class Test Utilisez TraitOne, traittwo;
Copie L'utilisation de plusieurs traits peut cependant créer des conflits de noms. UN erreur fatale est retourné si les traits ont des méthodes avec le même nom:
trait traitone public function log () echo "je suis une méthode de traiton!"; trait traittwo public function log () echo" Je suis une méthode de traittwo!"; Test de classe Utiliser TraitOne, traittwo; Erreur fatale PHP: le journal de la méthode des traits n'a pas été appliqué, car il y a des collisions avec d'autres méthodes de trait 1
Copie Que pouvons-nous faire pour résoudre ce type de conflits? Nous pouvons utiliser le au lieu de
Opérateur, à l'exclusion de la méthode que nous ne voulons pas utiliser:
Class Test Utilisez TraitOne, traittwo traitOne :: log à la place de traittwo;
Copie La syntaxe est très simple: nous avons spécifié que nous voulons utiliser la méthode «journal» à partir du trait de trait, résolvant le conflit. Et si nous voulons faire comme ci-dessus, mais nous voulons toujours conserver les fonctionnalités fournies par la méthode «journal» de traittwo? Nous devons créer un alias
pour ça. Nous pouvons le faire avec l'utilisation du comme
opérateur. Dans l'exemple suivant, nous alias la méthode «log» comme «traittwo_log»:
Class Test Utilisez TraitOne, traittwo traitOne :: log à la place de traittwo; traittwo :: log as traittwo_log;
Copie De cette façon, nous pouvons toujours accéder à la méthode «journal» de traittwo, l'invoquant comme traittwo_log ():
$ test = nouveau test (); $ test-> log (); Je suis une méthode de traiton! $ test-> traittwo_log (); Je suis une méthode de traittwo!
Copie Utiliser l'opérateur AS pour modifier la visibilité d'une méthode de trait
À l'intérieur d'une classe, le comme
L'opérateur peut également être utilisé pour modifier la visibilité d'une méthode importée dans le cadre d'un trait. Dans l'exemple précédent, toutes les méthodes des traits sont public
. Nous pouvons changer cela à l'intérieur de la classe:
class test Utiliser TraitOne log comme protégé;
Copie Avec la syntaxe ci-dessus, nous avons spécifié que la méthode de journal de «Traitone» doit être utilisée comme protégé
même s'il était initialement déclaré avec un public
visibilité. En effet, si nous essayons d'invoquer la méthode du journal, nous recevons une erreur:
$ test = nouveau test (); $ test-> log (); AVERTISSEMENT PHP: Erreur non revêtue: APPEL TO PROTÉRÉ MÉTHODE TEST :: Log () à partir du contexte "Dans PHP Shell Code: 1
Copie Si nous fournissons un nom pour l'alias, le changement de visibilité sera appliqué à la méthode aliasée, tandis que l'original maintiendra sa visibilité:
classe test utiliser traitOne log comme protégé aliased_log; $ test = nouveau test (); $ test-> log (); Je suis une méthode de traiton! $ test-> aliased_log (); AVERTISSEMENT PHP: Erreur non revêtue: APPEL TO PROTÉRÉ MÉTHODE TEST :: aliased_log () du contexte "dans PHP Shell Code: 1
Copie Méthodes abstraites et statiques à l'intérieur d'un trait
À l'intérieur d'un trait, nous pouvons définir les deux abstrait
et statique
méthodes. Dans le premier cas, le trait nécessitera la classe qui l'utilise pour fournir une implémentation concrète de la méthode. Une erreur fatale sera générée si la classe n'implémente pas la méthode ou qu'elle n'est pas déclarée abstraite:
Copie Une méthode de trait peut également être déclarée et utilisée comme statique
:
Copie Propriétés de traits
Non seulement les méthodes, mais aussi les propriétés peuvent être définies à l'intérieur des traits, la seule règle à respecter est que si une propriété est définie à l'intérieur d'un trait, la classe qui en fait ne peut pas définir une propriété avec le même nom, sauf si elle a le Même visibilité et valeur initiale. Voici un exemple:
Copie Le $ nom
la propriété est définie en «traitone» et également dans la classe «test». Les deux ont la même visibilité (protégée), mais leur valeur initiale est différente, donc ils sont considérés comme incompatibles, ce qui se traduit par une erreur fatale.
Réflexions de clôture
Dans cet article, nous avons appris à savoir caractéristiques
, une fonctionnalité qui améliore la réutilisation du code en php. Nous avons vu comment les traits ne peuvent pas être instanciés mais seulement utilisés à l'intérieur des classes, via le utiliser
mot-clé. Nous avons vu quel est l'ordre de priorité qui est utilisé lorsqu'un trait et la classe il est utilisé dans les méthodes d'implémentation avec le même nom, comment résoudre ces conflits en utilisant le au lieu de
opérateur, et comment créer des alias pour les méthodes de trait et comment il est possible de changer leur visibilité avec le comme
opérateur.
Enfin, nous avons vu comment il est également possible de définir des propriétés et des méthodes statiques ou abstraites à l'intérieur d'un trait. Veux en savoir plus sur PHP? Nous avons de nombreux articles sur le sujet!
Tutoriels Linux connexes:
- Choses à installer sur Ubuntu 20.04
- Comment créer une application Tkinter à l'aide d'un objet orienté…
- Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
- Comment travailler avec l'API WooCommerce REST avec Python
- Comment comparer les performances du disque sur Linux
- Comment créer une pile de lampe basée sur Docker à l'aide de Docker sur…
- Mint 20: Mieux que Ubuntu et Microsoft Windows?
- Choses à installer sur Ubuntu 22.04
- Comment écrire des extensions de nautilus avec nautilus-python
- Comment propager un signal aux processus d'enfants à partir d'un bash…
- « Comment créer, emballer et signer une extension Web Firefox
- Comment activer l'autologine sur Kali Linux »