Rückblick – Organisiertes Projekt
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 14 von 91.
Aufgabe
EinfachErstellen wir eine vollständige Blog-Anwendung mit einer geeigneten Namespace-Organisation und führen dabei alles zusammen, was du über Namespaces, das Schlüsselwort use und das PSR-4-Autoloading gelernt hast.
Du erstellst ein gut strukturiertes Projekt mit fünf Dateien, die zeigen, wie reale PHP-Anwendungen ihren Code organisieren:
src/Models/Author.php: Definiere eineAuthor-Klasse im NamespaceBlog\Models. Sie sollte eine Eigenschaftpublic $name, einen Konstruktor, der den Namen entgegennimmt und setzt, sowie eine MethodegetBio()besitzen, die"Author: [name]"zurückgibt.src/Models/Post.php: Definiere einePost-Klasse im NamespaceBlog\Models. Sie sollte die Eigenschaftenpublic $titleundpublic $authorbesitzen, wobei author einAuthor-Objekt ist. Der Konstruktor nimmt einen Titel und einAuthor-Objekt entgegen und setzt beide. Füge eine MethodegetSummary()hinzu, die"[title] by [author name]"zurückgibt.src/Services/Publisher.php: Definiere einePublisher-Klasse im NamespaceBlog\Services. Sie sollte eine Methodepublish(Post $post)besitzen, die einPost-Objekt entgegennimmt und"Published: [post title]"zurückgibt. Du musst diePost-Klasse mit dem Schlüsselwortuseimportieren, da sie sich in einem anderen Namespace befindet.vendor/autoload.php: Erstelle einen PSR-4-Autoloader mitspl_autoload_register, der das Namespace-PräfixBlog\dem Verzeichnissrc/zuordnet. Dieser einzelne Autoloader übernimmt automatisch das Laden all deiner Klassen.index.php: Dein Einstiegspunkt. Binde zuerst den Autoloader ein und verwende dann das Schlüsselwortuse, umBlog\Models\Author,Blog\Models\PostundBlog\Services\Publisherzu importieren. Erstelle einenAuthornamens"Jane Smith", einenPostmit dem Titel"Getting Started with PHP"unter Verwendung dieses Autors sowie einenPublisher. Gib die Biografie des Autors, die Zusammenfassung des Beitrags und das Ergebnis der Veröffentlichung des Beitrags aus (jeweils in einer eigenen Zeile).
Beachte, wie der Publisher-Dienst vom Post-Modell abhängt. Dies zeigt, wie Klassen in unterschiedlichen Namespaces zusammenarbeiten können, indem sie mit use-Anweisungen importieren, was sie benötigen.
Probier es selbst
<?php
// Den Autoloader einbinden
require_once 'vendor/autoload.php';
// TODO: Importiere die notwendigen Klassen mit 'use'-Anweisungen
// - Blog\Models\Author
// - Blog\Models\Post
// - Blog\Services\Publisher
// TODO: Erstelle einen Author namens "Jane Smith"
// TODO: Create a Post with title "Getting Started with PHP" using that author
// TODO: Erstelle einen Publisher
// TODO: Gib die Bio des Authors aus
// TODO: Gib die Zusammenfassung des Posts aus
// TODO: Gib das Ergebnis der Veröffentlichung des Posts aus
?>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