Preskočiť na obsah
Backend 2. jún 2026 · 8 min čítania

PHP 8.3 vs. 8.4 — čo reálne zmení vo vašom projekte

PHP 8.4 vyšlo v novembri 2024 a prináša jednu z najväčších zmien v jazyku za posledné roky — property hooks. PHP 8.3 medzitým dozrieva a je dnes bezpečnou voľbou pre produkciu. Pozrime sa čo konkrétne tieto verzie priniesli a čo sa vám oplatí migrovať.

DC

Dušan Chlpek

PHP vývojár, GEAR s.r.o. · 25+ rokov praxe

Kontext: PHP 8.3 (november 2023) — aktívna podpora do novembra 2025, bezpečnostné opravy do novembra 2026. PHP 8.4 (november 2024) — aktívna podpora do novembra 2026. Pre nové projekty odporúčam PHP 8.4, pre stabilné projekty pokojne zostať na 8.3 do konca roka 2025.

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):

Počkajte (zostante na PHP 8.3) ak:

Ako otestovať kompatibilitu: Použite 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.

Potrebujete migráciu na PHP 8.4?

Vykonám audit kompatibility, identifikujem rizikové miesta a bezpečne presuniem váš projekt na novú verziu PHP.

Ďalšie články

Zavolať E-mail Dopyt

Ochrana súkromia

Táto stránka využíva cookies pre nevyhnutné fungovanie. Rešpektujeme vaše súkromie a legislatívu GDPR.