PHP 8.5 nüüd ametlikult väljas

Ingmar Aasoja
RSS: Jaga:

Novembri lõpus nägi ilmavalgust PHP versioon 8.5, mida Zone serverites oli võimalik juba mitu kuud alates beetaversioonist testida. Iga uue versiooniga deprekeeritakse vananenud funktsionaalsust ning lisatakse uut. Selles artiklis keskendume pigem uutele funktsionaalsustele.

PHP 8.5 nüüd ametlikult väljas

Pipe operator (|>)

See on ilmselt kõige vingem süntaksiuuendus ning funktsionaalsus, millest PHP arendajad veel mõned aastad tagasi unistadagi ei osanud. See aitab kindlasti kaasa koodi loetavusele ja kirjutamisele.

Eriti kasulik on see massiivide ja stringide töötluses. Kui lõpptulemuse saamiseks on vaja lasta muutuja läbi mitme funktsiooni, on seda nüüd võimalik teha aheldades.

Näide numbrijadast paaritute arvude eemaldamise kohta:

PHP 8.4

$numbers = implode(',', 
    array_filter(
        explode(',', '1,2,3,4,5,,6'), 
            function ($var) { 
                  return $var && !($var & 1); 
            }
      )
);

echo $numbers; // 2,4,6
Code language: PHP (php)

PHP 8.5

$numbers = '1,2,3,4,5,,6'
    |> (fn($s) => explode(',', $s))
    |> (fn($xs) => array_filter($xs, fn($var) => $var && !($var & 1)))
    |> (fn($xs) => implode(',', $xs));

echo $numbers; // 2,4,6
Code language: PHP (php)

array_first ja array_last funktsioonid

Funktsioonide nimed ütlevad juba ise, milleks need mõeldud on. Senised array_key_first ja array_key_last tegid küll elu lihtsamaks, kuid siiski tuli eelnevalt kontrollida, kas vastav element massiivis üldse eksisteerib.

PHP 8.4

$names = ['john', 'smith'];
$lastName = $names === [] ? null : $names[array_key_last($names)];

echo $lastName; // smithCode language: PHP (php)

PHP 8.5

$names = ['john', 'smith'];
$lastName = array_last($names);

echo $lastName; // smithCode language: PHP (php)

Stack trace fataalsetes veateadetes

Programmi lõpetavate errorite puhul oli sageli keeruline välja selgitada, kus sisemine probleem täpselt tekkis. Nüüd on veateadetes võimalik saada täpsemat infot. Märkusena: selleks peab php.ini failis olema seadistatud fatal_error_backtraces = On.

ini_set('memory_limit', '2M');

$dates = [];

function collectDates($dates) { 
    while (true) {
        $dates[] = time();
    }
}

collectDates($dates);Code language: PHP (php)

PHP 8.4 väljund:

Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 2097160 bytes) in /test.php on line 9

PHP 8.5 väljund:

Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 2097160 bytes) in /test.php on line 9
Stack trace:
#0 /test.php(13): collectDates(Array)
#1 {main}Code language: PHP (php)

URI Extension

Kui varem tuli URL-ist info kättesaamiseks see lahti võtta ja kontrollida, kas vastav osa eksisteerib, siis nüüd on selle jaoks olemas spetsiaalne laiendus:

PHP 8.4

$parsed = parse_url('https://example.com:80');

echo $parsed['port'] // 80
echo $parsed['path'] // Warning: Undefined array key "path" ...Code language: PHP (php)

PHP 8.5

use Uri\Rfc3986\Uri;

$uri = new Uri('https://example.com:80');

echo $uri->getPort(); // 80
echo $uri->getpath(); // ""
echo $uri->withPort(null)->toString(); // https://example.comCode language: PHP (php)

#[\NoDiscard] atribuut

Kui funktsioon on määratud midagi tagastama ja see väärtus on koodis oluline, saab nüüd funktsioonile määrata atribuudi, mis nõuab tagastatud väärtuse kasutamist:

PHP 8.4

function getName() {
    return 'Sohn Smith';
}

getName();Code language: PHP (php)

PHP 8.5

#[\NoDiscard] 
function getName() {
    return 'Sohn Smith';
}

getName();

// Warning: The return value of function getName() should either be used or intentionally ignored by casting...Code language: PHP (php)

Kokkuvõtteks

Täpsem info uue versiooni kohta on leitav PHP kodulehel, kus versioonile 8.5 on loodud spetsiaalne alamleht. Uue versiooni tulekuga tasub ära märkida ka seda, et versiooni 8.1 turvauuendused lõppevad 2025. aasta lõpus ning versioon 8.3 liigub aktiivsest toest ainult turvauuenduste faasi. Soovitatav on olemasolevad rakendused esimesel võimalusel uuele versioonile üle viia. Näiteks Laravel 12 juba toetab kõige uuemat versiooni, samuti äsja välja tulnud Symfony 8.0.

Populaarsed postitused

PHP 8.5 nüüd ametlikult väljas

Mitu veebilehte ühes serveris? Plussid, miinused ja riskid

Erki Nagla
Aina rohkem küsitakse: kas ma saan ühte serverit kasutada mitme veebilehe majutamiseks? Etteruttavalt ütlen kohe ära – lühike vastus sellele küsimusele...
PHP 8.5 nüüd ametlikult väljas

Kliendi edulugu: ehtekunstnik Anneli Tammik ja tosin aastat sujuvat veebikoostööd

Katrin Sulg
Ehtekunstnik Anneli Tammik on üks Eesti rahvusvaheliselt tuntumaid ehtekunstnikke. Tema loomingut kannavad näiteks Soome endine president Tarja Halonen,...
Zone ja Patchstack: partnerlus, mis tõstab WordPressi turvalisuse uuele tasemele

Zone ja Patchstack: partnerlus, mis tõstab WordPressi turvalisuse uuele tasemele

Nikita Tikhomirov
Meil on hea meel teatada, et Zone on nüüd Patchstacki ametlik partner. See tähendab, et Zone pakub Patchstacki lahendust oma klientidele ja partneritele...
Ettevõtte nime valimine: kuidas teha tark otsus ja vältida hilisemaid probleeme

Ettevõtte nime valimine: kuidas teha tark otsus ja vältida hilisemaid probleeme

Nikita Tikhomirov
Ettevõtte loomine algab ideest. Väga kiiresti jõuab aga iga alustav ettevõtja ühe olulise küsimuseni: mis saab ettevõtte nimeks? Hea nimi ei ole...