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 Klasse verwendest, kann mühsam werden. Mit dem Schlüsselwort use kannst du eine Klasse am Anfang deiner Datei importieren, sodass du sie mit ihrem kurzen Namen referenzieren kannst.
Statt wiederholt \Blog\User 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 Klassen aus demselben Namespace mithilfe gruppierter Imports importieren:
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
Wichtiger Punkt: Die Anweisung use muss nach der Deklaration von namespace (falls vorhanden) und vor jedem anderen Code stehen. Sie macht deinen Code übersichtlicher und leichter lesbar, da sie sich wiederholende Namespace-Pfade eliminiert.
Aufgabe
EinfachOrganisieren wir eine Messaging-Anwendung, indem wir das Schlüsselwort use verwenden, um Klassen übersichtlich zu importieren und zu vermeiden, überall vollständige Namespace-Pfade zu schreiben.
Du wirst drei Dateien erstellen, die zusammenarbeiten:
Messaging/Email.php: Definiere eineEmail-Klasse im NamespaceMessaging. Sie sollte einepublic $address-Eigenschaft, einen Konstruktor, der die Adresse entgegennimmt und festlegt, sowie einesend()-Methode besitzen, die"Sending email to [address]"zurückgibt.Messaging/SMS.php: Definiere eineSMS-Klasse im NamespaceMessaging. Sie sollte einepublic $phone-Eigenschaft, einen Konstruktor, der die Telefonnummer entgegennimmt und festlegt, sowie einesend()-Methode besitzen, die"Sending SMS to [phone]"zurückgibt.main.php: Binde beide Klassendateien ein und verwende anschließend das Schlüsselwortuse, um beide Klassen zu importieren. Erstelle einEmail-Objekt mit der Adresse"alice@example.com"und einSMS-Objekt mit der Telefonnummer"555-1234". Gib das Ergebnis des Aufrufs vonsend()für jedes Objekt aus (jeweils in einer eigenen Zeile).
Verwende in main.php statt new \Messaging\Email(...) zu schreiben, use-Anweisungen am Anfang, um die Klassen zu importieren. So kannst du einfach new Email(...) und new SMS(...) schreiben.
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 OOPKlassen vs. ObjekteDas Schlüsselwort $thisMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick – Einfacher Taschenrechner4Vererbung
Grundlegende VererbungDas Schlüsselwort parent::MethodenüberschreibungDas Schlüsselwort finalAbstrakte KlassenRückblick – Mitarbeiterhierarchie7Kapselung
Öffentlich, geschützt, privatZugriffsmodifikatoren im DetailGetter und SetterInformationsverbergungKonstruktor-Promotion (8.0)Wiederholung – System zur Verwaltung von Schülerdatensätzen2Namespaces & Autoloading
Einführung in NamespacesDas use-SchlüsselwortPSR-4-Autoloading-StandardComposer-AutoloaderRückblick – Organisiertes Projekt5Schnittstellen & Verträge
Einführung in SchnittstellenSchnittstellen implementierenMehrere Schnittstellen implementierenSchnittstelle vs. abstrakte KlasseTyp-Hinweise mit SchnittstellenRückblick – Formrechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objektklonen__serialize & __unserializeRückblick – Benutzerdefinierte Sammlung11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenBenutzerdefinierte Exception-HierarchieTry, Catch, FinallyRückblick – Formularvalidator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klassen-Eigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenSchreibgeschützte Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphie
Methodenüberschreibung erneut betrachtetPolymorphie über SchnittstellenTyp-Hinweise & Union-TypenSpätes statisches BindenRückblick – Zahlungsabwickler9Traits
Einführung in TraitsMehrere Traits verwendenAuflösung von Trait-KonfliktenAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschließende Herausforderungen
E-Learning-PlattformBankingsystemEntwicklung einer SpielfigurFahrzeugvermietungÜbe selbstständig: Online-PHP-Compiler