PHP 8.3 — čo ste možno prehliadli
PHP 8.3 Typované konštanty tried
Jedna z najžiadanejších zmien. Pred PHP 8.3 konštanty nemali typy — teraz áno:
// Pred PHP 8.3 — bez typov
class Status {
const ACTIVE = 'active'; // mohol to byť hocičo
const LIMIT = 100;
}
// PHP 8.3 — s typmi
class Status {
const string ACTIVE = 'active';
const int LIMIT = 100;
const float TAX = 0.23;
}
// PHP vyhodí TypeError ak sa typ nezhoduje — v compile time
interface Configurable {
const string VERSION = '1.0'; // aj interfejsy podporujú
}
PHP 8.3 json_validate()
Validácia JSON bez parseovania — rýchlejšia a bezpečnejšia alternatíva k json_decode() + kontrole chyby:
// Pred PHP 8.3 — neefektívne
$data = json_decode($input, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new InvalidArgumentException('Neplatný JSON');
}
// PHP 8.3 — priamo a jasne
if (!json_validate($input)) {
throw new InvalidArgumentException('Neplatný JSON');
}
$data = json_decode($input, true); // parsuje len ak je valídny
PHP 8.3 Atribút #[\Override]
Explicitne označíte metódy, ktoré prepisujú metódu rodiča. PHP vyhodí chybu ak rodič takú metódu nemá — ochrana pred preklepy:
class BaseController {
public function index(): void { /* ... */ }
}
class UserController extends BaseController {
#[\Override]
public function index(): void { /* OK */ }
#[\Override]
public function indx(): void { /* PHP vyhodí CHYBU — preklep! */ }
}
PHP 8.3 array_find() a array_find_key()
$users = [
['id' => 1, 'name' => 'Jana', 'role' => 'admin'],
['id' => 2, 'name' => 'Peter', 'role' => 'user'],
];
// Nájde prvý element spĺňajúci podmienku
$admin = array_find($users, fn($u) => $u['role'] === 'admin');
// ['id' => 1, 'name' => 'Jana', 'role' => 'admin']
// Nájde kľúč prvého elementu spĺňajúceho podmienku
$key = array_find_key($users, fn($u) => $u['role'] === 'admin');
// 0
PHP 8.4 — veľké zmeny
PHP 8.4 Property hooks — revolúcia v OOP
Property hooks sú najväčšia zmena v PHP od PHP 7.0. Umožňujú definovať logiku priamo pri property — bez zbytočných getter/setter metód:
class User {
// Pred PHP 8.4 — 15 riadkov boilerplate
private string $_email;
public function getEmail(): string { return $this->_email; }
public function setEmail(string $email): void {
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
throw new \InvalidArgumentException('Neplatný e-mail');
}
$this->_email = strtolower($email);
}
// PHP 8.4 — property hook
public string $email {
get => $this->email;
set {
if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
throw new \InvalidArgumentException('Neplatný e-mail');
}
$this->email = strtolower($value);
}
}
// Read-only computed property
public string $displayName {
get => "{$this->firstName} {$this->lastName}";
}
}
$user = new User();
$user->email = 'Jana@Example.com'; // volá set hook
echo $user->email; // jana@example.com — volá get hook
PHP 8.4 Asymetrická viditeľnosť
Môžete mať property, ktorá je verejne čitateľná, ale nastaviteľná iba interne:
class Order {
public private(set) string $status = 'pending';
// public = čítanie odkiaľkoľvek
// private(set) = zápis iba zvnútra triedy
public function approve(): void {
$this->status = 'approved'; // OK — sme vnútri triedy
}
}
$order = new Order();
echo $order->status; // 'pending' — OK
$order->status = 'x'; // Fatal Error — nie je povolené
PHP 8.4 Nové array funkcie
$numbers = [1, 2, 3, 4, 5];
// array_any() — aspoň jeden spĺňa podmienku
$hasEven = array_any($numbers, fn($n) => $n % 2 === 0); // true
// array_all() — všetky spĺňajú podmienku
$allPositive = array_all($numbers, fn($n) => $n > 0); // true
// Nahrádzajú verbózne array_filter() + count() kombinácie
PHP 8.4 new bez zátvoriek
// Pred PHP 8.4 — nutné zátvorky
$result = (new QueryBuilder())->select('*')->from('users')->get();
// PHP 8.4 — bez zátvoriek
$result = new QueryBuilder()->select('*')->from('users')->get();
PHP 8.4 Atribút #[\Deprecated]
class ApiClient {
#[\Deprecated(
message: 'Použite sendJson() namiesto toho.',
since: '2.0'
)]
public function send(array $data): void { /* ... */ }
}
Čo migrovať hneď a čo počkať
Migrujte hneď (PHP 8.3 → 8.4):
- Nové projekty — vždy PHP 8.4
- Projekty s aktívnym vývojom — oplatí sa pre property hooks a asymetrickú viditeľnosť
- Laravel 12+ podporuje PHP 8.4 natívne
Počkajte (zostante na PHP 8.3) ak:
- Projekt je v maintenance móde — nie je dôvod riskovať migráciu
- Máte závislosti (pluginy, knižnice), ktoré ešte nedeklarujú podporu PHP 8.4
- Hostingový provider ešte PHP 8.4 nenabízí (väčšina ale áno)
composer check-platform-reqs a nástroj PHP_CodeSniffer s pravidlami pre PHP 8.4. Prípadne spustite testy na PHP 8.4 v CI/CD pred nasadením.
Záver
PHP 8.4 s property hooks je skutočná evolúcia jazyka, nie len kosmetická zmena. Pre nové projekty ho odporúčam bez výhrad. Pre existujúce projekty zvážte migráciu ak aktívne vyvíjate — property hooks a asymetrická viditeľnosť reálne zjednodušia kód.
PHP 8.3 ostáva solídnou voľbou pre stabilné projekty do konca roka 2026 — bezpečnostné opravy stále prichádzajú. Migrujte keď budete pripravení, nie len preto, že existuje nová verzia.