Rückblick – Formrechner
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 32 von 91.
Aufgabe
EinfachErstellen wir einen Formrechner, der die Leistungsfähigkeit von Schnittstellen beim Erstellen flexiblen und erweiterbaren Codes demonstriert. Du erstellst eine Schnittstelle, die einen Vertrag zur Berechnung von Flächen definiert, und implementierst sie anschließend in verschiedenen Formklassen.
Du organisierst deinen Code auf vier Dateien verteilt:
Calculable.php: Definiere eineCalculable-Schnittstelle mit einer einzigen Methodensignatur:calculateArea(). Dieser Vertrag stellt sicher, dass jede berechenbare Form ihre Fläche berechnen kann.Rectangle.php: Erstelle eineRectangle-Klasse, dieCalculableimplementiert. Binde die Schnittstellendatei ein. Die Klasse sollte über die privaten Eigenschaften$widthund$heightverfügen, die über den Konstruktor gesetzt werden. ImplementierecalculateArea(), sodass die Fläche zurückgegeben wird (Breite multipliziert mit Höhe).Circle.php: Erstelle eineCircle-Klasse, die ebenfallsCalculableimplementiert. Binde die Schnittstellendatei ein. Die Klasse sollte über die private Eigenschaft$radiusverfügen, die über den Konstruktor gesetzt wird. ImplementierecalculateArea(), sodass die Fläche mithilfe der Formelpi() * radius * radiuszurückgegeben wird.main.php: Binde beide Formdateien ein. Erstelle eine Funktion namensdisplayArea, die einenCalculable-Parameter und einen Formnamen (String) akzeptiert. Die Funktion sollte Folgendes ausgeben:"[name] area: [area]", wobei die Fläche mithilfe vonnumber_format()auf 2 Dezimalstellen gerundet wird.
Du erhältst vier Eingaben: die Breite des Rechtecks, die Höhe des Rechtecks, den Radius des Kreises und einen Formnamen für den Kreis. Erstelle ein Rectangle mit der Breite und Höhe (wandle sie in Gleitkommazahlen um) sowie einen Circle mit dem Radius (wandle ihn in eine Gleitkommazahl um). Rufe displayArea() zweimal auf: zuerst mit dem Rechteck und "Rectangle" als Namen, anschließend mit dem Kreis und dem bereitgestellten Formnamen. Gib jedes Ergebnis in einer eigenen Zeile aus.
Die Funktion displayArea() funktioniert mit jeder Form, die Calculable implementiert. Sie muss nicht wissen, ob sie die Fläche eines Rechtecks, eines Kreises oder einer beliebigen zukünftigen Form berechnet, die du möglicherweise hinzufügst. Das ist die Stärke der Programmierung gegen eine Schnittstelle!
Probier es selbst
<?php
// Die Shape-Dateien einbinden
require_once 'Rectangle.php';
require_once 'Circle.php';
// TODO: Erstelle eine Funktion namens displayArea
// Sie sollte einen Calculable-Parameter und einen Formnamen (string) akzeptieren
// Ausgeben: "[name] area: [area]", wobei area mit number_format() auf 2 Dezimalstellen gerundet wird
// Eingaben lesen
$width = floatval(trim(fgets(STDIN)));
$height = floatval(trim(fgets(STDIN)));
$radius = floatval(trim(fgets(STDIN)));
$circleName = trim(fgets(STDIN));
// TODO: Erstelle ein Rectangle mit der Breite und Höhe
// TODO: Erstelle einen Circle mit dem Radius
// TODO: Rufe displayArea() mit dem Rectangle auf und verwende "Rectangle" als Namen
// TODO: Rufe displayArea() mit dem Circle auf und verwende den bereitgestellten Formnamen
?>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