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

SSL/TLS sertifikaatide eluiga lüheneb

SSL/TLS sertifikaatide eluiga lüheneb

Kaarel Urva
Alates 2026. aasta märtsist hakatakse välja andma lühema kehtivusajaga SSL/TLS-sertifikaate. Aastatel 2026–2029 väheneb sertifikaadi eluiga seniselt...
Drop catching ehk miks on domeeni aegumine tõsine probleem

Drop catching ehk miks on domeeni aegumine tõsine probleem

Nikita Tikhomirov
Domeeni aegumine on hetk, mil astuvad mängu automaatsed süsteemid ja teenused, mille eesmärk on domeen endale napsata murdosa sekundiga. Seda protsessi...
Kelle nimel on sinu domeen tegelikult registreeritud?

Kelle nimel on sinu domeen tegelikult registreeritud?

Ants Korsar
Veebimajutuse tellimine koos domeeni registreerimisega tundub mugav, kuid peidab endas riske. Kui domeen registreeritakse teenusepakkuja nimele, võib...
Mitu veebilehte ühes serveris? Plussid, miinused ja riskid

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...