Konstruktoren und Destruktoren
Initialisieren Sie Objekte mit __construct und bereinigen Sie sie mit __destruct.
Konstruktoren und Destruktoren ist eine kostenlose PHP Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des PHP Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.
Einführung: Konstruktoren und Destruktoren
Die Methode __construct() wird automatisch ausgeführt, wenn ein neues Objekt erstellt wird. Die Methode __destruct() wird ausgeführt, wenn das Objekt von der Garbage Collection erfasst wird. PHP 8 führte die Konstruktor-Property-Promotion ein.
Grundkonzepte
Wichtige Konzepte von Konstruktoren und Destruktoren:
__construct()initialisiert das Objekt- Die Konstruktor-Property-Promotion verkürzt den Code
__destruct()zur Bereinigung (Dateihandles, Verbindungen)- Der übergeordnete Konstruktor wird mit
parent::__construct()aufgerufen
Einfacher Konstruktor
Beispiel:
<?php
class User {
public string $name;
public string $email;
public function __construct(string $name, string $email) {
$this->name = $name;
$this->email = $email;
}
}
$user = new User('Alice', 'alice@example.com');
echo $user->name; // AliceKonstruktor-Promotion (PHP 8)
Fortsetzung:
<?php
class User {
// Shorthand: declare and assign in one go
public function __construct(
public readonly string $name,
public readonly string $email,
private int $loginCount = 0,
) {}
}
$u = new User('Bob', 'bob@test.com');
echo $u->name; // BobValidierung im Konstruktor
Übung:
<?php
class PositiveInt {
public function __construct(private int $value) {
if ($value <= 0) {
throw new InvalidArgumentException(
"Value must be positive, got $value"
);
}
}
public function get(): int { return $this->value; }
}
$n = new PositiveInt(5); // OK
// new PositiveInt(-1); // throwsDestruktor
Vertiefung:
<?php
class FileLogger {
private mixed $handle;
public function __construct(string $path) {
$this->handle = fopen($path, 'a');
}
public function log(string $msg): void {
fwrite($this->handle, date('c') . ' ' . $msg . PHP_EOL);
}
public function __destruct() {
if ($this->handle) fclose($this->handle);
echo 'File handle released';
}
}Muster benannter Konstruktoren
Fortgeschrittene Verwendung:
<?php
class Money {
private function __construct(
private float $amount,
private string $currency
) {}
public static function usd(float $a): self { return new self($a, 'USD'); }
public static function eur(float $a): self { return new self($a, 'EUR'); }
public function format(): string {
return number_format($this->amount, 2) . ' ' . $this->currency;
}
}
echo Money::usd(9.99)->format(); // 9.99 USDÜbergeordneter Konstruktor
Praxisnahes Muster:
<?php
class Animal {
public function __construct(
protected string $name,
protected string $sound
) {}
}
class Dog extends Animal {
public function __construct(string $name) {
parent::__construct($name, 'Woof');
}
public function speak(): string {
return "{$this->name} says {$this->sound}!";
}
}
echo (new Dog('Rex'))->speak(); // Rex says Woof!Late Static Binding in Konstruktoren
Bewährte Vorgehensweisen:
<?php
class Base {
public static function create(): static {
return new static(); // 'static' resolves to calling class
}
}
class Child extends Base {}
$base = Base::create(); // Base object
$child = Child::create(); // Child object — static binding worksPraxisnahes Muster
Hier wird alles anhand eines praxisnahen Musters für Konstruktoren und Destruktoren zusammengeführt.
Häufige Fehler
Vermeiden Sie diese häufigen Fehler bei Konstruktoren und Destruktoren:
- Rufen Sie beim Erweitern einer Klasse immer parent::__construct() auf
- Verwenden Sie ab PHP 8 die Konstruktor-Promotion, um Boilerplate-Code zu reduzieren
- Es ist nicht garantiert, dass der Destruktor zu einem bestimmten Zeitpunkt ausgeführt wird
- Bevorzugen Sie benannte Konstruktoren gegenüber mehreren Überladungen von __construct()
Schnelltest
Was ist die Konstruktor-Property-Promotion in PHP 8?
Zusammenfassung: Konstruktoren und Destruktoren
Sie haben Konstruktoren und Destruktoren behandelt. Diese wichtigen Punkte sollten Sie sich merken:
- Rufen Sie beim Erweitern einer Klasse immer parent::__construct() auf
- Verwenden Sie ab PHP 8 die Konstruktor-Promotion, um Boilerplate-Code zu reduzieren
- Es ist nicht garantiert, dass der Destruktor zu einem bestimmten Zeitpunkt ausgeführt wird
- Bevorzugen Sie benannte Konstruktoren gegenüber mehreren Überladungen von __construct()
Häufig gestellte Fragen
Ist die Lektion „Konstruktoren und Destruktoren“ kostenlos?
Ja — der vollständige Text von „Konstruktoren und Destruktoren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des PHP Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Konstruktoren und Destruktoren“?
Initialisieren Sie Objekte mit __construct und bereinigen Sie sie mit __destruct. Du übst PHP Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um PHP Academy zu starten?
Keine Vorkenntnisse erforderlich. PHP Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Konstruktoren und Destruktoren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser PHP Academy-Lektion Code schreiben und ausführen?
Ja. Jede PHP Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Klassen, Eigenschaften und Methoden
- Konstruktoren und Destruktoren
- Statische Eigenschaften und Methoden
- Überblick über Magic Methods