php 74

Novinky v PHP 7.4

Vydanie novej stable verzie php 7.4 sa pomaly blíži. Aktuálne je už k dispozícii testovacia verzia a je možné testovať jej funkcionalitu. Php 7.4 nám prináša zopár zaujimavých noviniek a vylepšení.

Pozrime sa na tie najzaujímavejšie novinky:

Typed properties v Triedach rfc

Umožnuje nám zadať typ premennej vo vnútry triedy. Tím sa zbavíme nejčastějšieho PHPDoc komentára /** @var int $premenna */.

class User {
    public int $id;
    public string $name;
    public int $age;
}

Po vytvorení triedy je potrebné premenné buď inicializovať pomocou konštruktora, alebo po vytvorení triedy. Zavolanie premennej pred inicializáciou vyvolá chybu:

Fatal error: Uncaught Error: Typed property User::$age must not be accessed before initialization

$user = new User();

var_dump($user->age); – vyvolá chybu, nakoľko premenná age nie je inicializovaná a aktuálne po vytvoreni objeku je NULL a nie typu int.

$user->age = 6;

var_dump($user->age); – zobrazí dáta

Null Coalescing Assignment Operator rfc

– priradenie premennej len ak je jej hodnota null

// PHP < 7.4 pôvodny zápis
$data['user_id'] = $data['user_id'] ?? 'value';

// PHP >= 7.4
$data['user_id'] ??= 'value';

FFI – Foreign Function Interface rfc

FFI je nové rozšírenie pre PHP, ktoré umožní používať funkcie, knižnice a premenné z jazyka C, rovnako ako to umožňuje Python. Má to priniesť predovšetkým možnosť písania rozšírení PHP v samotnom PHP

Príklad použitia funkcie printf() z C knižnice libc.so.6

// create FFI object, loading libc and exporting function printf()
$ffi = FFI::cdef(
    "int printf(const char *format, ...);", 
    "libc.so.6");
// call C printf()
$ffi->printf("Hello %s!\n", "world");

Preloading rfc

Táto úprava sa týka rozšírenia opcache a vďaka nej je možné na vyžiadanie skompilovať súbory na prvý request a následne ich uloží do zdielanej pamäte a ďalší HTTP request už použije skompilovaný kód.Tým sa značne zvýší výkon.

Táto funkcia so sebou prináša problém pri editácii kódu. Po zmene triedy je potrebné reštartovať webserver, aby sa prečistila opcache. Ďaľší problém je aj v prípade, že jedna aplikácia používa viacero tried s rovnakým názvom. Táto funkcionalita zvyšuje rýchlosť o 30 – 50%.

Pozor, funkcia opcache_reset() neodstrání skompilované triedy, vždy je nutné reštartovať web server, aby sa zmena prejavila.

Password Hashing Registry rfc

Vznikla nová funkce password_algos() vracajúca pole dostupných hashovacích algoritmov. Dôvodom bolo to, že vo funkcii password_* nie sú vždy dostupné všetky algoritmy. Záleží na knižniciach, s ktorými je PHP na danom stroji skompilovanné

print_r(password_algos());
/*
  Array (
      [0] => "2y" // Ident for "bcrypt"
      [1] => "argon2i"
      [2] => "argon2id"
  )
*/

Numeric Literal Separator rfc

PHP 7.4 umožňuje oddelovať podtržníkmi format čísla, aby vyzeralo vizuálne krajšie. Vyzerá to nasledovne:

$nenaformatovanyTvar = 107925284.88;

$formatovaneCislo = 107_925_284.88;

Podčiarknutia jednoducho php ignoruje.

Array spread operator rfc

Operátor rozšírenia poľa, umožnuje jednoducho rozšíriť a spájať polia:

$arrayA = [1, 2, 3];

$arrayB = [4, 5];

$result = [0, ...$arrayA, ...$arrayB, 6 ,7];

// [0, 1, 2, 3, 4, 5, 6, 7]

Treba však myslis na to, že to funguje len pri poliach s numerickymi klúčmi.

Extension HASH rfc

Táto extension je od php 7.4 defaultne povolená.

PEAR nie je predvolene zapnutý EXTERNALS

Keďže PEAR už nie je aktívne udržiavaný, hlavný tím sa rozhodol odstrániť PEAR z predvolenej inštalácie od PHP 7.4.