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

Uus gTLD-de taotlusvoor: domeenimaailm on muutunud

Uus gTLD-de taotlusvoor: domeenimaailm on muutunud

Ants Korsar
Rohkem kui kümme aastat on möödunud ajast, mil internet koges oma seni suurimat domeenilaiendite avardumist. 2012. aastal avas ICANN taotlusvooru uutele...
Claude Code, Codex CLI ja OpenCode: AI-agendid Zone platvormil

Claude Code, Codex CLI ja OpenCode: AI-agendid Zone platvormil

Ingmar Aasoja
Terminalipõhised AI-agendid on viimase aastaga muutunud päriselt praktilisteks tööriistadeks. Oleme Zones AI-koodimisagentide arengut huviga jälginud...
Partner soovitab: esimese kodulehe loomine võib olla lihtsam kui esialgu tundub

Partner soovitab: esimese kodulehe loomine võib olla lihtsam kui esialgu tundub

Alustava ettevõtja jaoks võib kodulehe loomine tunduda suure investeeringuna ja keerulise ettevõtmisena. Sageli tekib tunne, et korraliku veebilehe...
Tarbija küsib: Miks ma ei saa domeeni eest raha tagasi?

Tarbija küsib: Miks ma ei saa domeeni eest raha tagasi?

Ants Korsar
Miks ei saa tarbija domeeni registreerimist 14 päeva jooksul tühistada? Käesolevas blogiloos selgitame, miks domeen erineb tavalisest e-poe ostust.