PHP 8.4
PHP 8.4 (eller t.o.m. 8.4.1) är nu ute med ett par fantastiska nyheter. Har inte möjlighet att gå igenom allt här (spana in officiella php.net och t.ex. stitcher.io för mer övergripande nyheter) – men två saker som är väldigt värda att belysa:
"Without parentheses"
PHP har alltid varit märkligt med att man måste wrappa new
när man ska kalla på en metod efter att ha instansierat ett objekt:
1$results = (new Calculator())->calculate();
1$results = (new Calculator())->calculate();
Jag har stött på andra PHP-utvecklare som inte ens har känt till detta syntax utan verkar ha "lärt" sig att new Calculator()->calculate()
inte funkar som i andra programmeringsspråk och helt enkelt kört den långa vägen istället (vilket såklart fortfarande kan vara mer passande och läsbart):
1$calculator = new Calculator();2$results = $results->calculate();
1$calculator = new Calculator();2$results = $results->calculate();
Men nu i.o.m. PHP 8.4. kan man helt enkelt använda sig av:
1$results = new Calculator()->calculate();
1$results = new Calculator()->calculate();
Property hooks
Property hooks funkar lite som accessors/"custom attributes" i Laravel (gissningsvis kommer de använda property hooks "natively" i framtiden), där vi nu inte längre kommer att behöva skriva separata "getters" och "setters" – utan där vi kan definiera dem direkt för attributen. Exempel (saxat ifrån php.net):
1class Person2{3 // A "virtual" property. It may not be set explicitly.4 public string $fullName {5 get => $this->firstName . ' ' . $this->lastName;6 }78 // All write operations go through this hook, and the result is what is written.9 // Read access happens normally.10 public string $firstName {11 set => ucfirst(strtolower($value));12 }1314 // All write operations go through this hook, which has to write to the backing value itself.15 // Read access happens normally.16 public string $lastName {17 set {18 if (strlen($value) < 2) {19 throw new \InvalidArgumentException('Too short');20 }21 $this->lastName = $value;22 }23 }24}
1class Person2{3 // A "virtual" property. It may not be set explicitly.4 public string $fullName {5 get => $this->firstName . ' ' . $this->lastName;6 }78 // All write operations go through this hook, and the result is what is written.9 // Read access happens normally.10 public string $firstName {11 set => ucfirst(strtolower($value));12 }1314 // All write operations go through this hook, which has to write to the backing value itself.15 // Read access happens normally.16 public string $lastName {17 set {18 if (strlen($value) < 2) {19 throw new \InvalidArgumentException('Too short');20 }21 $this->lastName = $value;22 }23 }24}
Lägg där till en rad nya array-funktioner som array_find
och array_any
/array_all
samt nya mb_
-funktioner (mb_ucfirst
och mb_lcfirst
äntligen!) så är PHP 8.4 en riktigt fullpackad uppdatering!