PHP 8
Tänk att det redan har gått fem och ett halvt år sedan PHP 7 släpptes! Idag är då alltså dags för nästa stora release; PHP 8.
PHP 8 har med sig flera riktigt bra och smidiga nya funktioner som kommer att göra livet bra mycket lättare för oss som arbetar med det dagligen. Dessutom plockas en del funktionalitet helt bort som blev deprikerade/började fasas ut i PHP 7.4. En snabb titt på några av dem
str_contains()
Äntligen! Tänk alla åren som man har skrivit följande kodsnutt:
1if (strpos('hustomte', 'tomte') !== false) { }
1if (strpos('hustomte', 'tomte') !== false) { }
Nu kan man helt enkelt istället skriva följande tack vare en ny helper:
1if (str_contains('hustomte', 'tomte')) { }
1if (str_contains('hustomte', 'tomte')) { }
Som bonus kommer även str_ends_with()
och str_starts_with()
med. Gör precis det man föreställer sig.
"Union types" och ny "Mixed type"
Tidigare har det varit ganska meckigt att typea sin kod i PHP då man bara får ange en returtyp, och dessutom så var "mixed" inte en av dessa. T.ex.
1function divide(int $a, int $b): int {2 return $a/$b;3}45echo divide(5, 6); // 0
1function divide(int $a, int $b): int {2 return $a/$b;3}45echo divide(5, 6); // 0
Nu tillåts man att göra t.ex.
1function divide(int $a, int $b): int|float {2 return $a/$b;3}45echo divide(5, 6); // 0.83
1function divide(int $a, int $b): int|float {2 return $a/$b;3}45echo divide(5, 6); // 0.83
Eller för all del:
1function divide(int $a, int $b): mixed {2 return $a/$b;3}45echo divide(5, 6); // 0.83
1function divide(int $a, int $b): mixed {2 return $a/$b;3}45echo divide(5, 6); // 0.83
"Named arguments"/"named parameters"
Föreställ dig att du har funktionen:
1function document(2 string $text,3 string $font = '',4 bool $html = false,5 int $size = 146) {}
1function document(2 string $text,3 string $font = '',4 bool $html = false,5 int $size = 146) {}
I de fallen man endast vill sätta $text
och $size
får man kanske göra:
1$object->document('my string', '', false, 18);
1$object->document('my string', '', false, 18);
Andra och tredje parametern är onödiga (och kan vara svårt att förstå vid en snabb överblick). I PHP 8 kan du helt enkelt istället:
1$object->document(text: 'my string', size: 18);
1$object->document(text: 'my string', size: 18);
Intressant är att man dessutom kan kombinera detta med array spreads:
1$arr = [2 'text' => 'my string',3 'size' => 184];56$object->document(...$arr);
1$arr = [2 'text' => 'my string',3 'size' => 184];56$object->document(...$arr);
Snabbåtkomst till klassnamn
Relativt vanligt är att man behöver jämföra olika klassobjekt och handla därefter. I.o.m. PHP 8 finns en snygg liten genväg för att komma åt just klassnamnet:
1namespace App\Library;23class MyClass {}45// --67$object = new \App\Library\MyClass;89var_dump(get_class($object)); // < PHP 8, string(19) "App\Library\MyClass"10var_dump($object::class); // >= PHP 8, string(19) "App\Library\MyClass"
1namespace App\Library;23class MyClass {}45// --67$object = new \App\Library\MyClass;89var_dump(get_class($object)); // < PHP 8, string(19) "App\Library\MyClass"10var_dump($object::class); // >= PHP 8, string(19) "App\Library\MyClass"
@-operatorn är helt borttagen
I tidigare versioner av PHP har man kunna gömma fel med @
, vilket blev deprikerat PHP 7.4.
–
Allt detta är bara ett fåtal av de nyheterna som PHP 8 för med sig, spana också in t.ex. "Constructor property promotion" (PHP.net), "Nullsafe operator" (PHP.net) och "Non-capturing catches" (PHP.net).
Medan PHP 7 förde med sig enorma prestandaförbättringar så verkar PHP 8 mer fokusera på att lägga till och förbättra nödvändig funktionalitet som har tillkommit de senaste åren – samtidigt som man städar ut sådant som kanske aldrig skulle funnits från början i ett modernt programmeringsspråk.
PHP 7.4 lär finnas kvar ett bra tag till (aktiv support fram till 28 nov 2021, säkerhetspatcher t.o.m. 28 nov 2022). Dock så fasas idag 7.2 ut helt, och 7.3 får om ett par dagar endast stöd i form av säkerhetsuppdateringar.
–
Uppdaterat 2020-11-27: Missade att php.net lanserade en ny smidig liten undersida som visar på ett gäng av nyheterna i PHP 8, väl värt att spana in för att få en snabb uppdatering på vad som är nytt.