Menu
Coddy logo textTech

Konstruktor-Promotion (8.0)

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

PHP 8.0 führte die Konstruktor-Promotion ein, eine Funktion, die den Boilerplate-Code beim Definieren von Klassen drastisch reduziert. Anstatt Eigenschaften separat zu deklarieren und sie anschließend im Konstruktor zuzuweisen, kannst du beides in einem Schritt erledigen.

Hier ist der traditionelle Ansatz, den du bisher verwendet hast:

<?php
class Product {
    private string $name;
    private float $price;
    
    public function __construct(string $name, float $price) {
        $this->name = $name;
        $this->price = $price;
    }
    
    public function getInfo(): string {
        return $this->name . ": $" . $this->price;
    }
}

Mit der Konstruktor-Promotion fügst du den Zugriffsmodifikator direkt zu den Konstruktorparametern hinzu:

<?php
class Product {
    public function __construct(
        private string $name,
        private float $price
    ) {}
    
    public function getInfo(): string {
        return $this->name . ": $" . $this->price;
    }
}

$product = new Product("Laptop", 999.99);
echo $product->getInfo();

Ausgabe:

Laptop: $999.99

Indem du private, protected oder public vor einem constructor-parameters hinzufügst, erstellt PHP automatisch die Eigenschaft und weist ihr den Wert zu. Du kannst promoted und reguläre parameters im selben constructor mischen und bei Bedarf weiterhin Logik im Körper des constructor hinzufügen.

Wichtiger Punkt: Die Konstruktor-Promotion eliminiert sich wiederholende Eigenschaftsdeklarationen und Zuweisungen und macht deine Klassen übersichtlicher und leichter lesbar, während die vollständige Kontrolle über die Kapselung erhalten bleibt.

challenge icon

Aufgabe

Einfach

Lass uns ein Kontaktverwaltungssystem erstellen, das die Eleganz der Konstruktor-Promotion demonstriert. Du erstellst eine klare, moderne PHP-Klasse, die Boilerplate-Code vermeidet und gleichzeitig eine ordnungsgemäße Kapselung gewährleistet.

Du organisierst deinen Code über zwei Dateien:

  • Contact.php: Erstelle eine Contact-Klasse, die Konstruktor-Promotion verwendet, um alle Eigenschaften direkt in der Konstruktorsignatur zu definieren. Dein Kontakt sollte Folgendes besitzen:
    • Eine private $name-Eigenschaft (String)
    • Eine private $email-Eigenschaft (String)
    • Eine private $phone-Eigenschaft (String) mit dem Standardwert "Not provided"
    Verwende die Syntax für Konstruktor-Promotion: Keine separaten Eigenschaftsdeklarationen erforderlich! Füge eine öffentliche Methode getFullDetails() hinzu, die "[name] | [email] | [phone]" zurückgibt. Füge außerdem eine Methode getSummary() hinzu, die "Contact: [name]" zurückgibt.
  • main.php: Binde die Contact-Datei ein. Du erhältst drei Eingaben: einen Namen, eine E-Mail-Adresse und eine Telefonnummer. Erstelle zwei Contact-Instanzen:
    • Der erste Kontakt sollte alle drei Werte verwenden (Name, E-Mail-Adresse und Telefonnummer).
    • Der zweite Kontakt sollte nur den Namen und die E-Mail-Adresse verwenden (und sich auf den Standardwert für die Telefonnummer verlassen).
    Gib vier Zeilen aus:
    • Die vollständigen Details des ersten Kontakts
    • Die Zusammenfassung des ersten Kontakts
    • Die vollständigen Details des zweiten Kontakts
    • Die Zusammenfassung des zweiten Kontakts

Beachte, wie du mit der Konstruktor-Promotion Eigenschaften definieren, ihre Sichtbarkeit festlegen, ihre Typen deklarieren und Werte zuweisen kannst – alles in einer einzigen, übersichtlichen Konstruktorsignatur. Der optionale Parameter für die Telefonnummer mit einem Standardwert zeigt, dass promotete Parameter nahtlos mit Standardwerten funktionieren, genau wie reguläre Parameter.

Probier es selbst

<?php

require_once 'Contact.php';

// Eingabe lesen
$name = trim(fgets(STDIN));
$email = trim(fgets(STDIN));
$phone = trim(fgets(STDIN));

// TODO: Ersten Kontakt mit allen drei Werten erstellen (name, email, phone)

// TODO: Zweiten Kontakt nur mit name und email erstellen (Standard-phone verwenden)

// TODO: Vollständige Details des ersten Kontakts ausgeben

// TODO: Zusammenfassung des ersten Kontakts ausgeben

// TODO: Vollständige Details des zweiten Kontakts ausgeben

// TODO: Zusammenfassung des zweiten Kontakts ausgeben

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