Zusammenfassung - Eigene Collection
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 50 von 91.
Aufgabe
EinfachLassen Sie uns eine Collection-Klasse erstellen, die alle magischen Methoden vereint, die Sie in diesem Kapitel gelernt haben. Ihre Sammlung wird als flexibler Datencontainer fungieren, der sich natürlich anfühlt — sie speichert Elemente nach Schlüsseln, prüft deren Existenz, findet Elemente dynamisch und erstellt unabhängige Kopien.
Sie werden Ihren Code in zwei Dateien organisieren:
Collection.php— Erstellen Sie eineCollection-Klasse, die Elemente in einem privaten Array speichert. Ihre Sammlung sollte das Zusammenspiel dieser magischen Methoden unterstützen:__construct()— Akzeptiert ein optionales Array mit Anfangselementen (Standard ist ein leeres Array)__get($key)— Gibt das Element am angegebenen Schlüssel zurück odernull, falls es nicht existiert__set($key, $value)— Speichert den Wert unter dem angegebenen Schlüssel__isset($key)— Gibt zurück, ob der Schlüssel in der Sammlung existiert__unset($key)— Entfernt das Element am angegebenen Schlüssel__call($method, $args)— Behandelt dynamische Finder-Methoden. Wenn eine Methode aufgerufen wird, die mitfindBybeginnt (wiefindByRoleoderfindByStatus), extrahieren Sie den Feldnamen (wandeln Sie den Teil nach "findBy" in Kleinbuchstaben um), durchsuchen Sie alle Elemente und geben Sie den Schlüssel des ersten Elements zurück, bei dem dieses Feld mit dem ersten Argument übereinstimmt. Geben Sienullzurück, wenn keine Übereinstimmung gefunden wird. Für jede andere Methode geben Sie"Unknown method: [method]"zurück__toString()— Gibt"Collection([count] items)"zurück, wobei count die Anzahl der Elemente ist__clone()— Beim Klonen sollte das items-Array eine frische Kopie sein (keine Referenz auf das Original)
main.php— Binden Sie die Collection-Datei ein. Sie erhalten drei Eingaben: einen Schlüsselnamen, einen Rollenwert und eine Suchrolle. Erstellen Sie eine Sammlung von Benutzern und demonstrieren Sie alle magischen Methoden:- Erstellen Sie eine neue
Collection - Fügen Sie einen Benutzer mit dem Eingabeschlüssel hinzu und speichern Sie ein Array, bei dem
"name"auf den Schlüssel und"role"auf den eingegebenen Rollenwert gesetzt ist - Fügen Sie einen weiteren Benutzer mit dem Schlüssel
"bob"hinzu und speichern Sie["name" => "Bob", "role" => "editor"] - Geben Sie aus, ob der Eingabeschlüssel existiert, indem Sie
isset()verwenden — Ausgabe"exists"oder"missing" - Geben Sie das Ergebnis des Aufrufs der dynamischen Methode
findByRole()mit der Suchrolle als Argument aus (dies sollte den Schlüssel des passenden Benutzers zurückgeben, oder nichts, wenn null) - Geben Sie die Sammlung mit
echoaus (löst__toStringaus) - Klonen Sie die Sammlung und entfernen Sie dann den Eingabeschlüssel aus dem Klon
- Geben Sie aus, ob der Eingabeschlüssel in der ursprünglichen Sammlung existiert — Ausgabe
"exists"oder"missing"(sollte noch existieren, da der Klon unabhängig ist)
- Erstellen Sie eine neue
Jede Ausgabe sollte in einer eigenen Zeile stehen. Der dynamische Finder geht davon aus, dass jedes Element in Ihrer Sammlung ein assoziatives Array mit Feldern wie "name" und "role" ist.
Probier es selbst
<?php
require_once 'Collection.php';
// Eingaben lesen
$keyName = trim(fgets(STDIN));
$roleValue = trim(fgets(STDIN));
$searchRole = trim(fgets(STDIN));
// TODO: Erstelle eine neue Collection
// TODO: Füge einen Benutzer mit dem eingegebenen Schlüssel hinzu, speichere ein Array mit "name" => key und "role" => roleValue
// TODO: Füge einen weiteren Benutzer mit dem Schlüssel "bob" hinzu, speichere ["name" => "Bob", "role" => "editor"]
// TODO: Gib aus, ob der eingegebene Schlüssel existiert, unter Verwendung von isset() - Ausgabe "exists" oder "missing"
// TODO: Gib das Ergebnis des Aufrufs von findByRole() mit searchRole als Argument aus
// TODO: Gib die Collection mit echo aus (löst __toString aus)
// TODO: Klone die Collection und lösche dann den eingegebenen Schlüssel aus dem Klon mit unset
// TODO: Gib aus, ob der eingegebene Schlüssel in der ORIGINALEN Collection existiert - "exists" oder "missing"
?>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