PHP 8.5 tagad oficiāli izlaists

Ingmar Aasoja
RSS: Dalīties:

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.

PHP 8.5 now officially released

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.

Populāri ieraksti

.NO domain now at Zone – is your business ready for the Norwegian market?

.NO domēns tagad pieejams Zone – vai jūsu uzņēmums ir gatavs Norvēģijas tirgum?

Ants Korsar
Ja jūs plānojat paplašināt savu darbību Norvēģijā vai jau darbojaties tur, tagad ir īstais brīdis nodrošināt sev vietēju un uzticamu tīmekļa...
Zone Webmail 3.0: New features that make email management easier than ever

Zone Webmail 3.0: Jaunas funkcijas, kas padara e-pasta pārvaldību vieglāku nekā jebkad agrāk

Nikita Tikhomirov
Ir klāt uzlabotā Zone Webmail versija, kas piedāvā jaunu un lietotājam draudzīgu pieredzi. Mūsu mērķis ar šo jauno atjauninājumu bija vienkāršs:...
Still the rightful owner of your domain? ICANN’s new rule means it’s time to double-check

Vai joprojām esat sava domēna likumīgais īpašnieks? ICANN jaunais noteikums – laiks pārbaudīt vēlreiz

Jaanus Putting
Sākot ar 2025. gada 28. maiju, stājas spēkā jauna ICANN politika, kas ietekmē visus ģenerisko domēnu, piemēram, .COM, .ORG un .NET, īpašniekus....
Why choose a .EU domain today?

.EU domēns – kāpēc izvēlēties tieši šodien?

Jaanus Putting
Mēs dzīvojam laikā, kad globālās varas dinamika mainās ātrāk nekā jebkad agrāk. Kamēr Eiropa virzās uz spēcīgāku, vienotāku iekšējo tirgu,...