PHP 8.1 och PHP Foundation
Här i dagarna släpps PHP 8.1. Som vanligt med dessa releaser så finns det alltid dem som är bättre än mig själv att förklara nyheterna, jag rekommenderar starkt att kika på PHP Watch och Brent Roose på stitcher.io för att få sig en bild kring vad som är nytt.
I korthet så är det mest "quality of life improvements" och i vissa fall något bättre prestanda. Men – det finns i alla fall en sak jag har experimenterat med och sett fram emot.
Enums
Äntligen får PHP stöd för enumerations/enums som en del av språket, tidigare har man fått lösa det genom t.ex. konstanter (eller använda externa paket, så som spatie/enums).
1<?php23class Roles {4 const ADMIN = 'admin';5 const STANDARD = 'standard';6}78// UserRoles::ADMIN
1<?php23class Roles {4 const ADMIN = 'admin';5 const STANDARD = 'standard';6}78// UserRoles::ADMIN
Men nu funkar de alltså som en egen typ av klass
1<?php23enum Role {4 case Admin;5 case Standard;6}
1<?php23enum Role {4 case Admin;5 case Standard;6}
Man kan också ge dem ett värde:
1<?php23enum Role {4 case Admin = 'admin';5 case Standard = 'standard';6}
1<?php23enum Role {4 case Admin = 'admin';5 case Standard = 'standard';6}
Och i sin tur kan en enum även ha egna funktioner:
1<?php23enum Role {4 case Admin = 'admin';5 case Standard = 'standard';67 public function labelColor(): string8 {9 return match($this)10 {11 Role::Admin => 'red',12 Role::Standard => 'green',13 };14 }15}1617echo(Role::Admin->labelColor())18// "red"1920$admin = Role::Admin;21echo($admin->labelColor())22// "red"
1<?php23enum Role {4 case Admin = 'admin';5 case Standard = 'standard';67 public function labelColor(): string8 {9 return match($this)10 {11 Role::Admin => 'red',12 Role::Standard => 'green',13 };14 }15}1617echo(Role::Admin->labelColor())18// "red"1920$admin = Role::Admin;21echo($admin->labelColor())22// "red"
Med enums får man då även fördelen när man type-hintar, t.ex:
1<?php23class User {4 public function __construct(string $name, Role $role = Role::Standard) {5 echo($role->value);6 }7}89// 👍10$user = new User('Marcus Olsson', Role::Admin);11// 'admin'1213// 👎14$user = new User('Marcus Olsson', 'standard');15// Uncaught TypeError
1<?php23class User {4 public function __construct(string $name, Role $role = Role::Standard) {5 echo($role->value);6 }7}89// 👍10$user = new User('Marcus Olsson', Role::Admin);11// 'admin'1213// 👎14$user = new User('Marcus Olsson', 'standard');15// Uncaught TypeError
PHP Foundation
Tidigare i veckan utannonserade JetBrains (utvecklarna bakom bl.a. PHP Storm och otaliga andra språkspecifika IDE:er) initiativet PHP Foundation.
Syftet är möjliggöra för utvecklare att arbeta på och utveckla PHP som språk, både på heltid eller deltid och bli kompenserad för det. I nuläget sker nämligen mycket av utvecklingen idéellt eller under arbetstid hos de företagen som har möjlighet att låta anställda jobba deltid på projektet.
Detta gör såklart PHP till ett ganska utsatt språk – trots att PHP driver runt 80% av alla webbplatser på ett sätt eller annat – särskilt nu i samband med att den kanske allra mest framstående utvecklaren Nikita Popov har lämnat projektet för att fokusera på annat.
Redan från start finns stora backare med, t.ex. Automattic (förvaltarna av Wordpress), Laravel, Symfony och tidigare nämnda JetBrains. Snart har en halv miljon kronor samlats in till fonden och vi håller tummarna för att detta ger PHP möjligheten att fortsätta växa och vara ett säkert språk att använda för webben.