PHP 8.1 och PHP Foundation

Marcus Olsson,

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<?php
2 
3class Roles {
4 const ADMIN = 'admin';
5 const STANDARD = 'standard';
6}
7 
8// UserRoles::ADMIN
1<?php
2 
3class Roles {
4 const ADMIN = 'admin';
5 const STANDARD = 'standard';
6}
7 
8// UserRoles::ADMIN

Men nu funkar de alltså som en egen typ av klass

1<?php
2 
3enum Role {
4 case Admin;
5 case Standard;
6}
1<?php
2 
3enum Role {
4 case Admin;
5 case Standard;
6}

Man kan också ge dem ett värde:

1<?php
2 
3enum Role {
4 case Admin = 'admin';
5 case Standard = 'standard';
6}
1<?php
2 
3enum Role {
4 case Admin = 'admin';
5 case Standard = 'standard';
6}

Och i sin tur kan en enum även ha egna funktioner:

1<?php
2 
3enum Role {
4 case Admin = 'admin';
5 case Standard = 'standard';
6 
7 public function labelColor(): string
8 {
9 return match($this)
10 {
11 Role::Admin => 'red',
12 Role::Standard => 'green',
13 };
14 }
15}
16 
17echo(Role::Admin->labelColor())
18// "red"
19 
20$admin = Role::Admin;
21echo($admin->labelColor())
22// "red"
1<?php
2 
3enum Role {
4 case Admin = 'admin';
5 case Standard = 'standard';
6 
7 public function labelColor(): string
8 {
9 return match($this)
10 {
11 Role::Admin => 'red',
12 Role::Standard => 'green',
13 };
14 }
15}
16 
17echo(Role::Admin->labelColor())
18// "red"
19 
20$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<?php
2 
3class User {
4 public function __construct(string $name, Role $role = Role::Standard) {
5 echo($role->value);
6 }
7}
8 
9// 👍
10$user = new User('Marcus Olsson', Role::Admin);
11// 'admin'
12 
13// 👎
14$user = new User('Marcus Olsson', 'standard');
15// Uncaught TypeError
1<?php
2 
3class User {
4 public function __construct(string $name, Role $role = Role::Standard) {
5 echo($role->value);
6 }
7}
8 
9// 👍
10$user = new User('Marcus Olsson', Role::Admin);
11// 'admin'
12 
13// 👎
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.