Menu
Coddy logo textTech

Readonly-Eigenschaften (PHP 8.1)

Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 19 von 91.

PHP 8.1 führte readonly-properties ein, die nur einmal zugewiesen und danach nicht mehr geändert werden können. Im Gegensatz zu Konstanten werden readonly-properties während der Initialisierung des object statt zum Zeitpunkt der Definition der class festgelegt.

Du deklarierst eine readonly-Eigenschaft, indem du das Schlüsselwort readonly vor der Typdeklaration hinzufügst:

<?php
class User {
    public readonly string $id;
    public readonly string $name;
    
    public function __construct(string $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }
}

$user = new User("U001", "Alice");
echo $user->id . "\n";
echo $user->name;

Ausgabe:

U001
Alice

Nach der Zuweisung führt der Versuch, eine readonly-Eigenschaft zu ändern, zu einem Fehler. Dadurch eignen sie sich perfekt für Werte, die während der gesamten Lebensdauer eines object konstant bleiben sollten, etwa IDs oder Zeitstempel der Erstellung.

Readonly-Eigenschaften müssen eine Typdeklaration haben und können nur einmal zugewiesen werden, und zwar innerhalb der deklarierenden Klasse (typischerweise im constructor). Im Gegensatz zu normalen Eigenschaften kann ihnen bei der Deklaration kein Standardwert zugewiesen werden. Sie funktionieren mit jedem Sichtbarkeitsmodifikator:

<?php
class Product {
    public function __construct(
        public readonly string $sku,
        private readonly float $cost
    ) {}
    
    public function getCost(): float {
        return $this->cost;
    }
}

$product = new Product("ABC123", 29.99);
echo $product->sku;

Ausgabe:

ABC123

Wichtiger Punkt: Readonly-Eigenschaften bieten Unveränderlichkeit auf Eigenschaftsebene. Sie sind ideal für Daten, die ein Objekt identifizieren oder sich nach der Erstellung nicht ändern sollten, und verbinden die Flexibilität der Initialisierung zur Laufzeit mit der Sicherheit, versehentliche Änderungen zu verhindern.

challenge icon

Aufgabe

Einfach

Erstelle ein unveränderliches Konfigurationssystem, das readonly-Eigenschaften verwendet, um sicherzustellen, dass kritische Einstellungen nach der Initialisierung nicht versehentlich geändert werden können.

Du erstellst zwei Dateien, die zusammenarbeiten, um die Anwendungskonfiguration zu verwalten:

  • Config.php: Definiere eine Config-Klasse, die die Anwendungskonfiguration mit unveränderlichen Einstellungen darstellt. Die Klasse sollte drei öffentliche readonly-Eigenschaften besitzen: string $appName, string $version und int $maxConnections. Verwende die Konstruktor-Promotion, um alle drei readonly-Eigenschaften in einer einzigen, übersichtlichen Konstruktor-Definition zu deklarieren und zu initialisieren. Füge eine getInfo()-Methode hinzu, die einen String im Format "[appName] v[version] (max: [maxConnections] connections)" zurückgibt.
  • main.php: Binde die Datei der Config-Klasse ein. Du erhältst drei Eingaben: den Namen der Anwendung, die Version und die maximale Anzahl an Verbindungen (als String, der in eine Ganzzahl umgewandelt werden muss). Erstelle mithilfe dieser Werte ein Config-Objekt. Gib das Ergebnis von getInfo() in der ersten Zeile aus. Gib anschließend jede readonly-Eigenschaft in einer eigenen Zeile aus, indem du direkt auf sie zugreifst: den Namen der Anwendung, die Version und die maximale Anzahl an Verbindungen.

Die readonly-Eigenschaften stellen sicher, dass die Werte nach der Erstellung einer Konfiguration unverändert bleiben – ideal für Einstellungen, die während der gesamten Laufzeit deiner Anwendung konstant bleiben sollen. Beachte, wie die Kombination aus Konstruktor-Promotion und readonly eine sehr kompakte Möglichkeit bietet, unveränderliche Wertobjekte zu definieren.

Deine Ausgabe sollte den formatierten Info-String gefolgt von jedem einzelnen Eigenschaftswert anzeigen und demonstrieren, dass readonly-Eigenschaften weiterhin von außerhalb der Klasse gelesen werden können.

REQUIRED OUTPUT FORMAT: [Your translated content here]

Probier es selbst

<?php

require_once 'Config.php';

// Eingaben lesen
$appName = trim(fgets(STDIN));
$version = trim(fgets(STDIN));
$maxConnections = intval(trim(fgets(STDIN)));

// TODO: Erstelle ein Config-Objekt mit den Eingabewerten

// TODO: Gib das Ergebnis von getInfo() aus

// TODO: Gib jede readonly-Eigenschaft in einer eigenen Zeile aus:
// - App-Name
// - Version
// - max. Verbindungen

?>
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

Übe selbstständig: Online-PHP-Compiler