Konstanten in Klassen
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 16 von 91.
Manchmal benötigen Sie Werte in einer Klasse, die sich niemals ändern sollten. Klassenkonstanten bieten eine Möglichkeit, feste Werte zu definieren, die über alle Instanzen hinweg gleich bleiben und nach der Deklaration nicht mehr geändert werden können.
Sie definieren eine Konstante mit dem const-Schlüsselwort innerhalb einer Klasse. Konstantennamen werden konventionell 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. Sie greifen auf sie zu mit self::CONSTANT_NAME innerhalb der Klasse oder ClassName::CONSTANT_NAME von außerhalb:
<?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 mehr geändert werden. Sie sind ideal für Werte, die in Ihrer gesamten Anwendung unverändert bleiben sollen, wie z. B. Konfigurationswerte, Statuscodes oder mathematische Konstanten.
Aufgabe
EinfachLassen Sie uns ein Temperaturumrechnungs-Utility erstellen, das Klassenkonstanten verwendet, um feste Umrechnungswerte zu speichern, die sich nie ändern.
Sie werden zwei Dateien erstellen, um Ihren Code zu organisieren:
Temperature.php— Definieren Sie eineTemperature-Klasse, die Temperaturumrechnungen handhabt. Die Klasse sollte drei Konstanten haben:FREEZING_POINT_Cgesetzt auf0,BOILING_POINT_Cgesetzt auf100undCONVERSION_FACTORgesetzt auf1.8(verwendet für die Umrechnung von Celsius in Fahrenheit). Fügen Sie einepublic $celsius-Eigenschaft und einen Konstruktor hinzu, der den Celsius-Wert akzeptiert und setzt. Fügen Sie einetoFahrenheit()-Methode hinzu, welche die gespeicherte Celsius-Temperatur mit der Formel(celsius * CONVERSION_FACTOR) + 32in Fahrenheit umrechnet. Fügen Sie außerdem einegetStatus()-Methode hinzu, die"Freezing"zurückgibt, wenn die Temperatur der Gefrierpunkt-Konstante entspricht,"Boiling", wenn sie der Siedepunkt-Konstante entspricht, oder andernfalls"Normal".main.php— Binden Sie die Temperature-Klassendatei ein. Erstellen Sie drei Temperature-Objekte mit den Werten0,100und25. Geben Sie 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 Sie alle drei ausgegeben haben, greifen Sie direkt von der Klasse aus auf die KonstanteBOILING_POINT_Czu (unter Verwendung vonTemperature::BOILING_POINT_C) und geben Sie diese in einer neuen Zeile aus.
Denken Sie daran, dass auf Konstanten innerhalb der Klasse mit self::CONSTANT_NAME und von außerhalb mit ClassName::CONSTANT_NAME zugegriffen wird. Im Gegensatz zu Eigenschaften verwenden Konstanten beim Zugriff nicht das $-Symbol.
Spickzettel
Klassenkonstanten sind feste Werte, die sich nie ändern und von allen Instanzen einer Klasse gemeinsam genutzt werden. Definieren Sie diese mit dem Schlüsselwort const:
<?php
class Circle {
const PI = 3.14159;
public function area($radius) {
return self::PI * $radius * $radius;
}
}
Greifen Sie innerhalb der Klasse mit self::CONSTANT_NAME auf Konstanten zu:
return self::PI * $radius * $radius;
Greifen Sie von außerhalb der Klasse mit ClassName::CONSTANT_NAME auf Konstanten zu:
echo Circle::PI;
Wichtige Unterschiede zu statischen Eigenschaften:
- Konstanten können nach der Deklaration nicht mehr geändert werden
- Konstanten verwenden nicht das
$-Symbol - Konstanten sind ideal für feste Werte wie Konfigurationseinstellungen, Statuscodes oder mathematische Konstanten
Konventionsgemäß werden Konstantennamen in Großbuchstaben geschrieben:
<?php
class HttpStatus {
const OK = 200;
const NOT_FOUND = 404;
const SERVER_ERROR = 500;
}
echo HttpStatus::OK; // 200
Probier es selbst
<?php
require_once 'Temperature.php';
// TODO: Erstellen Sie drei Temperature-Objekte mit den Werten 0, 100 und 25
// TODO: Geben Sie für jede Temperatur das Format "[fahrenheit]F - [status]" aus
// Jede Temperatur in einer eigenen Zeile
// TODO: Greifen Sie direkt über die Klasse auf die Konstante BOILING_POINT_C zu und geben Sie diese aus
// Verwenden Sie die Syntax KlassenName::KONSTANTEN_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 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