Vizibilitatea Asimetrică (Asymmetric Visibility) este una dintre cele mai spectaculoase facilități introduse în PHP 8.4. Ea permite definirea unor niveluri diferite de acces pentru citirea și scrierea (modificarea) aceleiași proprietăți dintr-o clasă.
Până la PHP 8.4, dacă doreai o proprietate care să poată fi citită liber din exterior, dar modificată exclusiv din interiorul metodelor clasei, erai forțat să o declari private și să scrii o metodă getter clasică (public function getStatus(): string). Cu vizibilitatea asimetrică, scrii o singură linie curată: public private(set) string $status.
Exemplu de utilizare a vizibilității asimetrice în PHP 8.4
<?php
declare(strict_types=1);
class ComandaMagazin {
// Proprietăți cu citire publică, dar modificare restricționată privat:
public private(set) string $numarComanda;
public private(set) string $status;
public protected(set) float $total;
public function __construct(string $numarComanda, float $total) {
$this->numarComanda = $numarComanda;
$this->total = $total;
$this->status = 'în_așteptare';
}
public function marcheazaCaPlatita(): void {
// Mutația este perfect legală din interiorul clasei:
$this->status = 'achitată';
}
}
$comanda = new ComandaMagazin('CMD-1082', 299.99);
// 1. CITIREA este complet publică și directă (fără $comanda->getStatus()):
echo "Comanda {$comanda->numarComanda} are statusul: {$comanda->status}\n";
// 2. SCRIEREA din exterior este blocată la nivel de compilator:
// $comanda->status = 'anulată';
// Fatal error: Cannot modify private(set) property ComandaMagazin::$status from global scope
Combinații Posibile de Vizibilitate
public private(set): Oricine poate citi proprietatea, doar clasa curentă o poate modifica.public protected(set): Oricine poate citi proprietatea, doar clasa curentă și clasele descendente (subclase) o pot modifica.protected private(set): Doar subclasele pot citi proprietatea, doar clasa părinte o poate modifica.
Întrebări & Exemple de Cod:
Vizibilitate Asimetrică în PHP 8.4 (public private(set))Ai o nelămurire despre utilizarea comenzii
Vizibilitate Asimetrică în PHP 8.4 (public private(set))sau 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.