Constructor Property Promotion este una dintre cele mai apreciate îmbunătățiri de sintaxă din PHP 8. În programarea orientată pe obiecte clasică (PHP 7 și anterior), definirea unui obiect simplu de date (DTO – Data Transfer Object) necesita scrierea aceluiași nume de proprietate de 4 ori: la definirea proprietății clasei, în lista de argumente a constructorului, în atribuirea $this->camp = $camp și în comentariul docblock.
Prin Constructor Property Promotion, adăugarea unui modificator de vizibilitate (public, protected sau private) direct în fața unui parametru din constructor îi semnalează compilatorului PHP să creeze automat proprietatea și să o inițializeze fără nicio linie suplimentară de cod în corpul constructorului.
<?php
declare(strict_types=1);
// ABORDAREA VECHE (PHP 7 - Mult cod repetitiv):
class UtilizatorVechi {
public string $nume;
public string $email;
private int $rolId;
public function __construct(string $nume, string $email, int $rolId) {
$this->nume = $nume;
$this->email = $email;
$this->rolId = $rolId;
}
}
// ABORDAREA MODERNĂ (PHP 8 - Compact, curat și lizibil):
class UtilizatorNou {
public function __construct(
public readonly string $nume,
public readonly string $email,
private int $rolId = 1,
protected ?string $avatar = null
) {
// Corpul constructorului este gol sau conține doar validări specifice!
}
}
$user = new UtilizatorNou('Elena Popa', 'elena@exemplu.ro');
echo $user->nume; // Elena Popa
Integrare cu readonly și Valori Implicite
Proprietățile promovate pot fi combinate cu modificatorul readonly (PHP 8.1+) pentru a garanta imutabilitatea stării după instanțiere, pot avea valori implicite și pot primi tipuri de uniune (ex: int|string).
Întrebări & Exemple de Cod:
Constructor Property Promotion în PHP 8Ai o nelămurire despre utilizarea comenzii
Constructor Property Promotion în PHP 8sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.