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'); // trueLocale::isRightToLeft
Locale::isRightToLeft('en'); // false
Locale::isRightToLeft(''); // false
Locale::isRightToLeft('ar'); // true
Locale::isRightToLeft('ar-US'); // true
Locale::isRightToLeft('ar-XY'); // trueNya 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]); // truearray_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]); // trueNy 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.
