Konstanten in Klassen
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 16 von 91.
Manchmal benötigst du Werte in einer Klasse, die sich niemals ändern sollen. Klassenkonstanten bieten eine Möglichkeit, feste Werte zu definieren, die für alle Instanzen gleich bleiben und nach der Deklaration nicht geändert werden können.
Du definierst eine Konstante mit dem Schlüsselwort const innerhalb einer Klasse. Konventionsgemäß werden Konstantennamen in Großbuchstaben geschrieben:
<?php
class Circle {
const PI = 3.14159;
public $radius;
public function __construct($radius) {
$this->radius = $radius;
}
public function area() {
return self::PI * $this->radius * $this->radius;
}
}
$circle = new Circle(5);
echo $circle->area();
Ausgabe:
78.53975Wie statische Eigenschaften gehören Konstanten zur Klasse und nicht zu einzelnen Objekten. Du greifst innerhalb der Klasse mit self::CONSTANT_NAME oder von außerhalb mit ClassName::CONSTANT_NAME auf sie zu:
<?php
class HttpStatus {
const OK = 200;
const NOT_FOUND = 404;
const SERVER_ERROR = 500;
}
echo HttpStatus::OK . "\n";
echo HttpStatus::NOT_FOUND;
Ausgabe:
200
404Wichtiger Punkt: Im Gegensatz zu statischen Eigenschaften können Konstanten nach ihrer Definition nicht geändert werden. Sie sind ideal für Werte, die während der gesamten Anwendung unverändert bleiben sollen, etwa Konfigurationswerte, Statuscodes oder mathematische Konstanten.
Aufgabe
EinfachErstellen wir ein Dienstprogramm zur Temperaturumrechnung, das Klassenkonstanten verwendet, um feste Umrechnungswerte zu speichern, die sich nie ändern.
Du erstellst zwei Dateien, um deinen Code zu organisieren:
Temperature.php: Definiere eineTemperature-Klasse, die Temperaturumrechnungen verarbeitet. Die Klasse sollte drei Konstanten haben:FREEZING_POINT_C, gesetzt auf0,BOILING_POINT_C, gesetzt auf100, undCONVERSION_FACTOR, gesetzt auf1.8(wird für die Umrechnung von Celsius in Fahrenheit verwendet). Füge einepublic $celsius-Eigenschaft und einen Konstruktor hinzu, der den Celsius-Wert entgegennimmt und setzt. Füge einetoFahrenheit()-Methode hinzu, die die gespeicherte Celsius-Temperatur mithilfe der Formel(celsius * CONVERSION_FACTOR) + 32in Fahrenheit umrechnet. Füge außerdem einegetStatus()-Methode hinzu, die"Freezing"zurückgibt, wenn die Temperatur dem Wert der Gefrierpunktkonstanten entspricht,"Boiling", wenn sie dem Wert der Siedepunktkonstanten entspricht, oder andernfalls"Normal".main.php: Binde die Klassendatei von Temperature ein. Erstelle drei Temperature-Objekte mit den Werten0,100und25. Gib für jede Temperatur die Fahrenheit-Umrechnung gefolgt vom Status in derselben Zeile in diesem Format aus:"[fahrenheit]F - [status]". Jede Temperatur sollte in einer eigenen Zeile stehen. Nachdem alle drei ausgegeben wurden, greife direkt über die Klasse auf die KonstanteBOILING_POINT_Czu (unter Verwendung vonTemperature::BOILING_POINT_C) und gib sie in einer neuen Zeile aus.
Denke daran, dass innerhalb der Klasse über self::CONSTANT_NAME und außerhalb über ClassName::CONSTANT_NAME auf Konstanten zugegriffen wird. Anders als bei Eigenschaften wird beim Zugriff auf Konstanten das Symbol $ nicht verwendet.
Probier es selbst
<?php
require_once 'Temperature.php';
// TODO: Erstelle drei Temperature-Objekte mit den Werten 0, 100 und 25
// TODO: Gib für jede Temperatur im Format aus: "[fahrenheit]F - [status]"
// Jede Temperatur in einer eigenen Zeile
// TODO: Greife auf die Konstante BOILING_POINT_C direkt von der Klasse zu und gib sie aus
// Verwende die Syntax ClassName::CONSTANT_NAME
?>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