Das use-Schlüsselwort
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 11 von 91.
Das Schreiben des vollständigen Namespace-Pfads bei jeder Verwendung einer Klasse kann mühsam werden. Das Schlüsselwort use ermöglicht es Ihnen, eine Klasse am Anfang Ihrer Datei zu importieren, sodass Sie sie über ihren Kurznamen referenzieren können.
Anstatt \Blog\User wiederholt zu schreiben, können Sie es einmal importieren:
<?php
use Blog\User;
$user = new User("Alice");
echo $user->name;
Wenn Sie Klassen aus verschiedenen Namespaces mit demselben Namen benötigen, können Sie mit dem Schlüsselwort as einen Alias erstellen:
<?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";
Ausgabe:
Alice
alice@example.com
Sie können auch mehrere Klassen aus demselben Namespace mithilfe von gruppierten Importen importieren:
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
Wichtiger Punkt: Die use-Anweisung muss nach der namespace-Deklaration (falls vorhanden) und vor jedem anderen Code stehen. Sie macht Ihren Code sauberer und einfacher zu lesen, indem sie repetitive Namespace-Pfade eliminiert.
Aufgabe
EinfachLassen Sie uns eine Messaging-Anwendung organisieren, indem wir das Schlüsselwort use verwenden, um Klassen sauber zu importieren und zu vermeiden, überall vollständige Namespace-Pfade schreiben zu müssen.
Sie werden drei Dateien erstellen, die zusammenarbeiten:
Messaging/Email.php— Definieren Sie eineEmail-Klasse im NamespaceMessaging. Sie sollte eine Eigenschaftpublic $address, einen Konstruktor, der die Adresse akzeptiert und setzt, und eine Methodesend()haben, die"Sending email to " . $this->addresszurückgibt.Messaging/SMS.php— Definieren Sie eineSMS-Klasse im NamespaceMessaging. Sie sollte eine Eigenschaftpublic $phone, einen Konstruktor, der die Telefonnummer akzeptiert und setzt, und eine Methodesend()haben, die"Sending SMS to " . $this->phonezurückgibt.main.php— Binden Sie beide Klassendateien ein und verwenden Sie dann das Schlüsselwortuse, um beide Klassen zu importieren. Erstellen Sie einEmail-Objekt mit der Adresse"alice@example.com"und einSMS-Objekt mit der Telefonnummer"555-1234". Geben Sie das Ergebnis des Aufrufs vonsend()für jedes Objekt aus (jeweils in einer eigenen Zeile).
In main.php importieren Sie die Klassen oben mit use-Anweisungen, anstatt new \Messaging\Email(...) zu schreiben, sodass Sie einfach new Email(...) und new SMS(...) schreiben können.
Spickzettel
Das Schlüsselwort use importiert eine Klasse am Anfang Ihrer Datei, sodass Sie sie über ihren Kurznamen anstelle des vollständigen Namespace-Pfads referenzieren können:
<?php
use Blog\User;
$user = new User("Alice");
Wenn Klassen aus verschiedenen Namespaces denselben Namen haben, erstellen Sie mit dem Schlüsselwort as einen Alias:
<?php
use Blog\User as BlogUser;
use Shop\User as ShopUser;
$blogger = new BlogUser("Alice");
$customer = new ShopUser("alice@example.com");
Importieren Sie mehrere Klassen aus demselben Namespace mithilfe von gruppierten Importen:
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
Die use-Anweisung muss nach der namespace-Deklaration (falls vorhanden) und vor jedem anderen Code stehen.
Probier es selbst
<?php
// Die Klassendateien einbinden
require_once 'Messaging/Email.php';
require_once 'Messaging/SMS.php';
// TODO: Verwende das 'use'-Schlüsselwort, um beide Klassen aus dem Messaging-Namespace zu importieren
// Dies ermöglicht es dir, 'new Email(...)' anstelle von 'new \Messaging\Email(...)' zu schreiben
// TODO: Erstelle ein Email-Objekt mit der Adresse "alice@example.com"
// TODO: Erstelle ein SMS-Objekt mit der Telefonnummer "555-1234"
// TODO: Gib das Ergebnis des Aufrufs von send() für jedes Objekt aus (jeweils in einer eigenen Zeile)
?>Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas $this-SchlüsselwortMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick - Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDas parent:: SchlüsselwortMethoden überschreibenDas final SchlüsselwortAbstrakte KlassenZusammenfassung – Mitarbeiter-Hierarchie7Kapselung
Public, Protected, PrivateZugriffsmodifikatoren im DetailGetter und SetterInformation HidingConstructor Promotion (8.0)Zusammenfassung – Studentenverwaltungssystem2Namensräume & Autoloading
Einführung in NamensräumeDas use-SchlüsselwortPSR-4 Autoloading-StandardComposer AutoloaderZusammenfassung – Organisiertes Projekt5Interfaces & Verträge
Einführung in InterfacesInterfaces implementierenMehrfache Interface-ImplementierungInterface vs. Abstrakte KlasseType Hinting mit InterfacesZusammenfassung – Formen-Rechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objekt-Klonen__serialize & __unserializeZusammenfassung - Eigene Collection11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenEigene Exception-HierarchieTry, Catch, FinallyZusammenfassung - Formular-Validator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klasseneigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenReadonly-Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphismus
Method Overriding erneut betrachtetPolymorphismus über InterfacesType Hinting & Union TypesLate Static BindingZusammenfassung – Payment Processor9Traits
Einführung in TraitsVerwendung mehrerer TraitsKonfliktlösung bei TraitsAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung