PHP 8.5 tagad oficiāli izlaists
Novembra beigās tika oficiāli izlaista PHP versija 8.5. Zone serveri jau vairākus mēnešus piedāvā agrīnu piekļuvi, sākot no beta fāzes. Katra jaunā versija atsakās no novecojušām funkcijām un ievieš jauninājumus. Šajā rakstā izceļam ievērojamākās jaunās iespējas.

Pipe operators (|>)
Šis, iespējams, ir viens no interesantākajiem sintakses jauninājumiem pēdējo gadu laikā – kaut kas, ko PHP izstrādātāji vēl nesen nevarēja iedomāties. Tas būtiski uzlabo koda lasāmību un padara ikdienas izstrādi plūstošāku.
Pipe operators ir īpaši noderīgs darbā ar masīviem un virkņu apstrādi. Ja gala rezultāta iegūšanai mainīgais jāizlaiž caur vairākām funkcijām, tagad tās var ķēdēt daudz elegantāk.
Piemērs, kā no secības izņemt nepāra skaitļus:
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 un array_last funkcijas
Kā jau nosaukumi liecina, šīs jaunās funkcijas atgriež masīva pirmo un pēdējo vērtību. Iepriekš array_key_first un array_key_last nedaudz palīdzēja, taču izstrādātājiem joprojām bija manuāli jāpārbauda, vai elementi vispār eksistē.
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 fatālo kļūdu ziņojumos
Ja programma avarēja fatālas kļūdas dēļ, bieži bija grūti noteikt, kur tieši radās problēma. PHP 8.5 tagad fatālo kļūdu ziņojumos sniedz detalizētāku stack trace. Piezīme: nepieciešams ieslēgt fatal_error_backtraces = On savā php.ini konfigurācijā.
ini_set('memory_limit', '2M');
$dates = [];
function collectDates($dates) {
while (true) {
$dates[] = time();
}
}
collectDates($dates);Code language: PHP (php)
PHP 8.4 izvadē:
Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 2097160 bytes) in /test.php on line 9
PHP 8.5 izvadē:
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 paplašinājums
Agrāk, lai iegūtu informāciju no URL, bija nepieciešama manuāla parsēšana un pārbaude, vai vajadzīgā daļa ir pieejama. PHP 8.5 ievieš īpašu paplašinājumu, kas šo procesu atvieglo:
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] atribūts
Ja funkcijas atgrieztajai vērtībai ir nozīme, izstrādātāji tagad var piespiest tās izmantošanu, pievienojot #[\NoDiscard] atribūtu. Tas palīdz pamanīt situācijas, kad svarīga atgrieztā vērtība varētu tikt ignorēta.
PHP 8.4
function getName() {
return 'Sohn Smith';
}
getName();Code language: PHP (php)
PHP 8.5
#[\NoDiscard]
function getName() {
return 'Sohn Smith';
}
getName();
// Brīdinājums: funkcijas getName() atgrieztā vērtība ir jāizmanto vai apzināti jāignorē, veicot piespiedu konvertēšanu...Code language: PHP (php)
Kopsavilkums
Kopsavilkums
Detalizētāka informācija par šo laidienu pieejama oficiālajā PHP mājaslapā, kur tagad ir īpaša lapa PHP 8.5. Vērts atzīmēt, ka PHP 8.1 drošības atjauninājumi beigsies 2025. gada beigās, bet PHP 8.3 pāriet tikai uz drošības atjauninājumiem. Mēs ļoti iesakām pēc iespējas ātrāk atjaunināt esošās lietotnes uz jaunāko versiju. Laravel 12 un jaunizlaistais Symfony 8.0 jau pilnībā atbalsta PHP 8.5.