Menu
Coddy logo textTech

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.53975

Wie 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
404

Wichtiger 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.

challenge icon

Aufgabe

Einfach

Lassen 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 eine Temperature-Klasse, die Temperaturumrechnungen handhabt. Die Klasse sollte drei Konstanten haben: FREEZING_POINT_C gesetzt auf 0, BOILING_POINT_C gesetzt auf 100 und CONVERSION_FACTOR gesetzt auf 1.8 (verwendet für die Umrechnung von Celsius in Fahrenheit). Fügen Sie eine public $celsius-Eigenschaft und einen Konstruktor hinzu, der den Celsius-Wert akzeptiert und setzt. Fügen Sie eine toFahrenheit()-Methode hinzu, welche die gespeicherte Celsius-Temperatur mit der Formel (celsius * CONVERSION_FACTOR) + 32 in Fahrenheit umrechnet. Fügen Sie außerdem eine getStatus()-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 Werten 0, 100 und 25. 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 Konstante BOILING_POINT_C zu (unter Verwendung von Temperature::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

?>
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung