PHP 8.4 ist da - und bringt Features, die seit Jahren gewünscht wurden. Property Hooks, Asymmetric Visibility und ein verbessertes DOM-API. Hier ist, was Unternehmen wissen müssen: Was ändert sich, was wird deprecated, und wie sieht die Upgrade-Strategie aus.
Die Top-Features in PHP 8.4
1. Property Hooks
Das größte Feature: Getter und Setter direkt in der Property-Deklaration:
class User {
public string $name {
get => strtoupper($this->name);
set => trim($value);
}
public string $email {
set {
if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
throw new InvalidArgumentException('Invalid email');
}
$this->email = strtolower($value);
}
}
}
Vorteile:
- Weniger Boilerplate-Code
- Validation direkt bei der Property
- Interfaces können Properties vorschreiben
- Kompatibel mit Constructor Property Promotion
Praxis-Tipp
Property Hooks ersetzen __get/__set für die meisten Use Cases. Migration von Magic Methods wird cleaner und performanter.
2. Asymmetric Visibility
Unterschiedliche Sichtbarkeit für Lesen und Schreiben:
class BankAccount {
// Public lesen, private schreiben
public private(set) float $balance = 0;
// Protected lesen, private schreiben
protected private(set) string $accountNumber;
public function deposit(float $amount): void {
$this->balance += $amount; // intern änderbar
}
}
Use Cases:
- Immutable-ähnliches Verhalten ohne readonly
- DTOs mit kontrollierten Änderungen
- Value Objects mit Validierung
3. Neues DOM-API (HTML5-konform)
Endlich ein modernes DOM-API:
// Alt (DOMDocument)
$dom = new DOMDocument();
@$dom->loadHTML($html); // Unterdrückt HTML5-Warnungen
// Neu (Dom\HTMLDocument)
$dom = Dom\HTMLDocument::createFromString($html);
$element = $dom->querySelector('.my-class');
$elements = $dom->querySelectorAll('a[href]');
Verbesserungen:
- HTML5-Parsing ohne Warnings
querySelector()undquerySelectorAll()- Modernes API nach DOM Living Standard
- Bessere Namespace-Unterstützung
4. Neue Array-Funktionen
// array_find - erstes Element das Bedingung erfüllt
$firstAdmin = array_find($users, fn($u) => $u->isAdmin());
// array_find_key - Key des ersten Matches
$key = array_find_key($users, fn($u) => $u->email === 'admin@example.com');
// array_any - mindestens ein Element erfüllt Bedingung
$hasAdmin = array_any($users, fn($u) => $u->isAdmin());
// array_all - alle Elemente erfüllen Bedingung
$allVerified = array_all($users, fn($u) => $u->isVerified());
Deprecations und Breaking Changes
Deprecated in PHP 8.4
| Feature | Alternative | Handlungsbedarf |
|---|---|---|
implode() mit Array als erstes Argument |
implode($glue, $array) |
Niedrig |
| Implizite nullable Types | Explizites ?Type |
Mittel |
E_STRICT Konstante |
Wird ignoriert | Niedrig |
| Einige LDAP-Funktionen | Neue API | Nur LDAP-User |
Wichtig für Legacy-Projekte
Implizite nullable Types (function foo(Type $param = null)) erzeugen jetzt Deprecation-Warnings. Ändern Sie zu ?Type $param = null.
Entfernt in PHP 8.4
session.sid_lengthundsession.sid_bits_per_characterINI-Settings- Einige veraltete Mysqli-Konstanten
Phar::setDefaultStub()wurde vereinfacht
Upgrade-Strategie nach PHP-Version
Von PHP 8.3 → 8.4
Risiko: Niedrig
- PHPStan/Psalm auf Level 6+ laufen lassen
- Deprecation-Warnings beheben (implizite nullable Types)
- Tests durchführen
- Upgrade durchführen
Zeitaufwand
Typischerweise 1-2 Tage für ein mittelgroßes Projekt (20-50k LOC).
Von PHP 8.1/8.2 → 8.4
Risiko: Mittel
Zusätzliche Schritte:
- Readonly-Properties prüfen (8.1 Feature)
- Enum-Usage überprüfen
- Deprecations aus 8.2/8.3 beheben
- Framework-Kompatibilität prüfen (Laravel 11+, Symfony 7+)
Von PHP 7.x/8.0 → 8.4
Risiko: Hoch - Schrittweise Migration empfohlen
- Erst auf PHP 8.1 migrieren (LTS-ähnlich stabil)
- Typed Properties und Union Types einführen
- Constructor Property Promotion nutzen
- Nach Stabilisierung auf 8.4
Mehr zur schrittweisen Migration: Legacy Modernisierung Guide
Framework-Kompatibilität
| Framework | PHP 8.4 Support | Mindestversion |
|---|---|---|
| Laravel | ✅ Ja | Laravel 11.x |
| Symfony | ✅ Ja | Symfony 7.x |
| Shopware | ⚠️ Ab 6.6 | Shopware 6.6+ |
| WordPress | ⚠️ Teilweise | 6.5+ (prüfen) |
| Drupal | ✅ Ja | Drupal 10.3+ |
Performance-Verbesserungen
PHP 8.4 bringt inkrementelle Performance-Verbesserungen:
- JIT-Optimierungen: Bessere Kompilierung von häufig genutztem Code
- Opcache: Verbesserte Preloading-Stabilität
- Memory: Effizientere Property-Verwaltung durch Hooks
Benchmarks zeigen 2-5% Verbesserung gegenüber 8.3 in typischen Web-Workloads.
Best Practices für den Einsatz
Property Hooks sinnvoll nutzen
// ✅ Gut: Validation und Transformation
class Product {
public float $price {
set => max(0, $value); // Negative Preise verhindern
}
}
// ❌ Vermeiden: Komplexe Logik in Hooks
class Order {
public float $total {
get {
// Zu komplex - besser als Methode
return $this->items->sum('price')
+ $this->shipping
- $this->discount;
}
}
}
Asymmetric Visibility für DTOs
readonly class UserDTO {
public function __construct(
public string $name,
public string $email,
public private(set) ?string $internalNote = null,
) {}
}
Fazit: Upgrade empfohlen
PHP 8.4 ist ein solides Release mit praktischen Features:
- Property Hooks reduzieren Boilerplate signifikant
- Asymmetric Visibility ermöglicht sauberere APIs
- DOM-API macht HTML-Parsing endlich angenehm
- Breaking Changes sind minimal und gut handhabbar
Für Projekte auf PHP 8.3 ist das Upgrade unkritisch. Bei älteren Versionen empfehle ich schrittweise Migration - lesen Sie mehr über technische Schulden und wann ein Architektur-Audit sinnvoll ist.
PHP-Upgrade Unterstützung
Planen Sie ein PHP-Upgrade? Ich analysiere Ihre Codebase auf Kompatibilität und erstelle einen konkreten Upgrade-Plan.