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.

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.