PHP 8.5 är här – 5 utvalda funktioner

Det är dags igen – den senaste PHP-uppdateringen har släppts. Här är 5 utvalda funktioner!

PHP 8.5 - 5 nya funktioner
  1. Pipe operator
  2. Stack traces vid fatal errors
  3. Enklare hantering av RTL
  4. Nya array-funktioner
  5. Ny CLI-flagga

Den senaste uppdateringen av PHP lanserades den 20 november. Den må inte vara revolutionerande i sig, men för likväl med sig flera trevliga funktioner. Vi har valt ut fem nyheter och funktioner som vi tycker är lite extra trevliga som gör kodandet lite enklare.

Innan vi börjar vill vi bara påminna om att vi inte byter PHP-version automatiskt åt dig. När du gör det bestämmer du helt själv! Om du är osäker kan du läsa mer här om hur du hanterar din PHP-version och vilka versioner vi uppdaterar med säkerhetsfixar innan de nått end-of-life.

PHP 8.5 är nu tillgängligt hos oss! Tänk på att du alltid bör uppdatera din PHP-verison, inte minst av säkerhetsskäl.

Pipe operator

Efter långa RFC-diskussioner är pipe-operatorn (|>) nu här. Den kommer låta dig skriva funktionella kedjor på ett betydligt renare sätt än innan. I praktiken betyder det att du kan kedja funktioner mer elegant utan att bygga hierarkier av parenteser.

Det kommer göra framtida kod mycket mer läsbar och smidig att arbeta med.

PHP 8.4 och äldre versioner:

$result = hash('sha256', strtolower(trim($data)));
 
 
 

PHP 8.5:

$result = $data
    |> trim(...)
    |> strtolower(...)
    |> hash('sha256', ...);

Stack traces vid fatal errors 

Fatal errors har länge gett felmeddelanden som varit ganska intetsägande. Andra språk brukar inkludera en stack trace, där man kan följa vilka funktioner som kallades fram till felet skedde och anropet avbröts.

WordPress har haft internt stöd för detta tidigare och det har gått att aktivera via plugin/moduler som Xdebug, men nu kommer det aktiveras som standard utan extra steg. De blir nu betydligt mer detaljerade, med bättre kontext och tydligare info om var felet faktiskt inträffade.

PHP 8.4 och äldre versioner:

Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 5242912 bytes) in ... on line ...
 
 
 
 

PHP 8.5:

Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 5242912 bytes) in /mnt/w/localhost/test/php85/error_handlers.php on line 6
Stack trace:
#0 file.php(...): str_repeat('A', 5242880)
#1 file.php(...): my_heavy_function()
#2 {main}

Enklare hantering av RTL

Att korrekt hantera språk där läsriktningen är höger-till-vänster kan vara en utmaning, särskilt i UI-logik där detaljer spelar roll. Nu introduceras två nya sätt att detektera RTL-språk: locale_is_right_to_left och Locale::isRightToLeft.

Det blir alltså mycket enklare att bygga språkmedvetna funktioner utan att själv behöva hålla koll på långa listor eller tredjepartsbibliotek. För internationella projekt är detta en liten men väldigt praktisk förbättring.

locale_is_right_to_left

locale_is_right_to_left('en'); // false
locale_is_right_to_left(''); // false
locale_is_right_to_left('ar'); // true
locale_is_right_to_left('ar-US'); // true
locale_is_right_to_left('he_IL'); // true
locale_is_right_to_left('ar-XY'); // true

Locale::isRightToLeft

Locale::isRightToLeft('en'); // false
Locale::isRightToLeft(''); // false
Locale::isRightToLeft('ar'); // true
Locale::isRightToLeft('ar-US'); // true
Locale::isRightToLeft('ar-XY'); // true

Nya array-funktioner

I över 25 år har PHP saknat en enkel, tydlig funktion för att få första eller sista elementet ur en array. Men pltösligt händer det: Äntligen kan vi få värdet av den första och sista elementet direkt, inte bara nyckelnamnet på elementet! Inget mer fulhack! De nya funktionerna är array_first() och array_last().

Det här har varit ett så återkommande problem att en del ramverk som t.ex Laravel har den här funktionen inbyggd med Illuminate\Support\Arr;.

Dessa kompletterar de tidigare array_key_firstoch array_key_last som introducerades i PHP 7.3.

array_key_first

array_first([1, 2, 3]); // 1
array_first([2, 3]); // 2
array_first(['a' => 2, 'b' => 1]); // 2
array_first([null, 2, 3]); // null
array_first([]); // null
array_first([$obj, 2, 3]); // $obj
array_first([1])); // 1
array_first([true]); // true

array_key_last

array_last([1, 2, 3]); // 3
array_last([2, 3]); // 3
array_last(['a' => 2, 'b' => 1]); // 1
array_last([2, 3, null]); // null
array_last([]); // null
array_last([2, 3, $obj]); // $obj
array_last([1])); // 1
array_last([true]); // true

Ny CLI-flagga

Att förstå varför PHP beter sig olika i CLI, FPM, Apache och andra SAPI-miljöer är ofta ett detektivarbete. Med php --ini=diff kan du direkt se skillnaderna mellan ini-filerna, inte bara en lista på vilka som laddas.

Det sparar tid, minskar misstag och felsökningarna effektivare — särskilt när ”det fungerar på min maskin” inte längre är ett acceptabelt svar.