Das use-Schlüsselwort
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 11 von 91.
Den vollständigen namespace-Pfad jedes Mal zu schreiben, wenn du eine class verwendest, kann mühsam werden. Mit dem use-keyword kannst du eine class am Anfang deiner Datei importieren, sodass du sie über ihren Kurznamen referenzieren kannst.
Instead, \Blog\User wiederholt zu schreiben, kannst du es einmal importieren:
<?php
use Blog\User;
$user = new User("Alice");
echo $user->name;
Wenn du classes aus unterschiedlichen Namespaces mit demselben Namen benötigst, kannst du mithilfe des as-keyword 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
Du kannst auch mehrere classes aus demselben namespace mit gruppierten import-Anweisungen einbinden:
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
Wichtiger Hinweis: Die use-Anweisung muss nach der namespace-Deklaration (falls vorhanden) und vor jedem anderen Code stehen. Dadurch wird dein Code übersichtlicher und leichter lesbar, da sich wiederholende Namespace-Pfade vermieden werden.
Aufgabe
EinfachOrganisieren wir eine Messaging-Anwendung mit dem use-keyword, um classes sauber zu importieren und zu vermeiden, überall vollständige namespace-Pfade zu schreiben.
Du erstellst drei files, die zusammenarbeiten:
Messaging/Email.php: Define eineEmail-class imMessaging-namespace. Sie sollte einepublic $address-property, einen constructor, der die address accepts und sets, sowie einesend()-method haben, die"Sending email to [address]"returns.Messaging/SMS.php: Define eineSMS-class imMessaging-namespace. Sie sollte einepublic $phone-property, einen constructor, der die phone number accepts und sets, sowie einesend()-method haben, die"Sending SMS to [phone]"returns.main.php: Include beide class files und verwende anschließend dasuse-keyword, um beide classes zu importieren. Create einEmail-object mit der address"alice@example.com"und einSMS-object mit der phone"555-1234". Print das result des Aufrufs vonsend()für jedes object (each in einer eigenen line).
In main.php importierst du die classes oben mit use-Anweisungen, statt new \Messaging\Email(...) zu schreiben, sodass du einfach new Email(...) und new SMS(...) schreiben kannst.
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
// Dadurch kannst du 'new Email(...)' statt 'new \Messaging\Email(...)' schreiben
// TODO: Create an Email object with address "alice@example.com"
// TODO: Erstelle ein SMS-Objekt mit der Telefonnummer "555-1234"
// TODO: Gib das Ergebnis des Aufrufs von send() auf jedem Objekt aus (jedes 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Übe selbstständig: Online-PHP-Compiler