Le mot-clé use
Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy — leçon 11 sur 91.
Écrire le chemin complet de l'espace de noms à chaque fois que vous utilisez une classe peut devenir fastidieux. Le mot-clé use vous permet d'importer une classe en haut de votre fichier, afin que vous puissiez la référencer par son nom court.
Au lieu d'écrire \Blog\User de manière répétée, vous pouvez l'importer une seule fois :
<?php
use Blog\User;
$user = new User("Alice");
echo $user->name;
Lorsque vous avez besoin de classes provenant de différents espaces de noms portant le même nom, vous pouvez créer un alias en utilisant le mot-clé as :
<?php
use Blog\User as BlogUser;
use Shop\User as ShopUser;
$blogger = new BlogUser("Alice");
$customer = new ShopUser("alice@example.com");
echo $blogger->name . "\n";
echo $customer->email . "\n";
Sortie :
Alice
alice@example.com
Vous pouvez également importer plusieurs classes à partir du même espace de noms en utilisant des importations groupées :
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
Point clé : L'instruction use doit apparaître après la déclaration namespace (le cas échéant) et avant tout autre code. Cela rend votre code plus propre et plus facile à lire en éliminant les chemins d'espace de noms répétitifs.
Défi
FacileOrganisons une application de messagerie en utilisant le mot-clé use pour importer les classes proprement et éviter d'écrire les chemins complets des espaces de noms partout.
Vous allez créer trois fichiers qui fonctionnent ensemble :
Messaging/Email.php— Définissez une classeEmaildans l'espace de nomsMessaging. Elle doit avoir une propriétépublic $address, un constructeur qui accepte et définit l'adresse, et une méthodesend()qui retourne"Sending email to [address]".Messaging/SMS.php— Définissez une classeSMSdans l'espace de nomsMessaging. Elle doit avoir une propriétépublic $phone, un constructeur qui accepte et définit le numéro de téléphone, et une méthodesend()qui retourne"Sending SMS to [phone]".main.php— Incluez les deux fichiers de classe, puis utilisez le mot-cléusepour importer les deux classes. Créez un objetEmailavec l'adresse"alice@example.com"et un objetSMSavec le téléphone"555-1234". Affichez le résultat de l'appel àsend()sur chaque objet (chacun sur sa propre ligne).
Dans main.php, au lieu d'écrire new \Messaging\Email(...), vous importerez les classes en haut avec des instructions use afin de pouvoir simplement écrire new Email(...) et new SMS(...).
Aide-mémoire
Le mot-clé use importe une classe en haut de votre fichier, vous permettant de la référencer par son nom court au lieu du chemin complet de l'espace de noms (namespace) :
<?php
use Blog\User;
$user = new User("Alice");
Lorsque des classes provenant de différents espaces de noms partagent le même nom, créez un alias en utilisant le mot-clé as :
<?php
use Blog\User as BlogUser;
use Shop\User as ShopUser;
$blogger = new BlogUser("Alice");
$customer = new ShopUser("alice@example.com");
Importez plusieurs classes du même espace de noms en utilisant des importations groupées :
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
L'instruction use doit apparaître après la déclaration namespace (le cas échéant) et avant tout autre code.
Essayez vous-même
<?php
// Inclure les fichiers de classe
require_once 'Messaging/Email.php';
require_once 'Messaging/SMS.php';
// TODO : Utiliser le mot-clé 'use' pour importer les deux classes de l'espace de noms Messaging
// Cela vous permet d'écrire 'new Email(...)' au lieu de 'new \Messaging\Email(...)'
// TODO : Créer un objet Email avec l'adresse "alice@example.com"
// TODO : Créer un objet SMS avec le téléphone "555-1234"
// TODO : Afficher le résultat de l'appel de send() sur chaque objet (chacun sur sa propre ligne)
?>Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation Orientée Objet
1Les bases de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition de méthodeLe mot-clé finalClasses abstraitesRécapitulatif - Hiérarchie des employés7Encapsulation
Public, Protégé, PrivéModificateurs d'accès en détailGetters et SettersMasquage d'informationPromotion de constructeur (8.0)Récapitulatif - Système de gestion d'étudiants10Concepts avancés de la POO
Composition vs HéritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibers (PHP 8.1)Clonage d'objets : analyse approfondieGénérateurs et Itérateurs13Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository2Espaces de noms et Autoloading
Introduction aux espaces de nomsLe mot-clé useStandard d'Autoloading PSR-4L'Autoloader ComposerRécapitulatif - Projet organisé5Interfaces et Contrats
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesInterface vs Classe AbstraiteType Hinting avec les InterfacesRécapitulatif - Calculateur de Formes8Méthodes magiques
Introduction aux méthodes magiques__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Clonage d'objets__serialize & __unserializeRécapitulatif - Collection personnalisée3Propriétés de classe
Propriétés d'instance vs Propriétés statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés readonly (PHP 8.1)Récapitulatif - Gestionnaire de compte bancaire6Polymorphisme
Retour sur la redéfinition de méthodePolymorphisme via les interfacesType Hinting et Types d'unionLiaison statique tardiveRécapitulatif - Processeur de paiement9Traits
Introduction aux TraitsUtilisation de plusieurs TraitsRésolution des conflits de TraitsMéthodes abstraites dans les TraitsTraits vs Héritage12Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie