Modern PHP 8.4 nyelvi elemek élőben: property hooks, aszimmetrikus láthatóság és új array-függvények - mindegyik fül alatt a valódi, szerveren futó PHP-kód és egy ténylegesen lefuttatott eredmény, a te bemeneteddel.
A "celsius" property `set` hookja MINDEN hozzárendeléskor lefut, és csendben az abszolút nullára (-273,15 °C) szorít, sosem dob hibát. A "fahrenheit" propertynek nincs saját tárolt mezője: az értéke mindig a celsius-ból SZÁMOLT - állítsd be bármelyiket, a másik automatikusan követi.
final class Temperature
{
public const float ABSOLUTE_ZERO_CELSIUS = -273.15;
public float $celsius {
set {
// Csendben szorít, sosem dob kivételt
$this->celsius = max(self::ABSOLUTE_ZERO_CELSIUS, $value);
}
}
// Nincs saját tárolt mezője - mindig a celsius-ból számolt érték
public float $fahrenheit {
get => $this->celsius * 9 / 5 + 32;
set {
$this->celsius = ($value - 32) * 5 / 9;
}
}
}A property hooks (property-horgok) előtt getter/setter metódusokkal kellett kiváltani ugyanezt a viselkedést ($obj->getCelsius() az $obj->celsius helyett) - a property hooks lehetővé teszi, hogy egy egyszerű mezőhöz hasonlóan férj hozzá, miközben a háttérben mégis validáció vagy számítás fut, kód-duplikáció nélkül.
Az aszimmetrikus láthatóság (asymmetric visibility) azt oldja meg, hogy egy property kívülről csak olvasható, de az osztályon belül írható legyen - korábban ehhez egy külön, privát mezőt és egy publikus getter-metódust kellett írni; PHP 8.4-ben ez egyetlen sorban (public private(set) $balance) kifejezhető.
Az array_find/array_any/array_all PHP 8.4-ben natívan, a nyelv belső C-implementációjában fut - korábban ugyanezt csak foreach-ciklussal vagy array_filter és kiegészítő logika kombinációjával lehetett megoldani, ami lassabb és bőbeszédűbb volt.
Ezek a nyelvi elemek nem új képességet adnak: minden itt bemutatott viselkedés megvalósítható volt korábbi PHP-verziókkal is, csak több kóddal és nagyobb hibalehetőséggel - a cél a tisztább, rövidebb, kevésbé hibára hajlamos kód.
Ez az oldal Google Analytics-et használ a látogatottság méréséhez. Ehhez a hozzájárulásod szükséges - részletek az adatvédelmi tájékoztatóban. Adatvédelmi tájékoztató