PHP 8.0 – šta je novo?
26.11. je izašla nova verzija PHP-a u verziji 8.0. U pitanju je zvanična podržana verzija.
PHP 8.0 donosi mnogo novina i novih funkcionalnosti vezanih za sintaksu, upravljanje greškama, stringove, objektno-orijentisano programiranje i još mnogo toga. Slobodno možemo reći da je u pitanju veliko izdanje koje na neki način predstavlja prekretnicu u daljem razvoju ovog programskog jezika.
Iako je doneo dosta novina, developeri su pokušali da postignu da nove funkcionalnosti ne naruše rad postojećih aplikacija razvijenih na PHP-u.
U ovom tekstu ćemo predstaviti samo one najveće i po nama najznačajnije izmene koje se javljaju u imenovanim parametrima, JIT (Just-In-Time) kompajlerima, atributima i konstruktor svojstvima.
Imenovani parametri
PHP 8.0 dozvoljava imenovane parametre u pozivanju funkcije/metode ko dodatak na tradicionalne pozicione parametre
str_contains(needle: 'Bar', haystack: 'Foobar');
Ovo čini imena parametara funkcije / metoda delom javnog API-a. Nestandardizovani DocBlock @no-named-arguments označava da biblioteka ne obezbeđuje reverznu kompatibilnost za imenovane parametre.
Atributi
Atributi dozvoljavaju deklarisanje meta-podataka za funkcije, klase, svojstva i parametre. Oni mapiraju imena klasa (deklarisane sa samim atributom) i mogu biti programatički fetch-ovani uz pomoć PHP Reflection API-a.
#[CustomAttribute]
class Foo {
#[AnotherAttribute(42)]
<em> public function bar(): void {}
}
Atributi čine jednostavnim deklarisanje atributa za koje je do sada bilo potebno čuvanje u DecBlock komentarima
Konstruktor svojstva
Nova sintaksa za deklarisanje svojstva klasa direktno iz metode konstruktora klase (_construct)
class User {
public function __construct(private string $name) {}
}
U konstruktoru PHP 8.0 podržava deklarisanje vidljivosti (public, private ili protected) i tip. Ta svojstva će biti regsitrovana kao svojstva klase sa istom vidljivošću i tipom kako su deklarisana u konstruktoru.
JIT (Just-In-Time)
PHP Opcache podržava JIT. PO podrazumevanoj vrednosti je isključen, pa ukoliko je uključen JIT kompajlira i kešira native sitrukcije. Ne previ nikakvu značajnu razliku u IO-bound veb-aplikacijama, ali obezbeđuje bolje perfomanse za CPU zahtevne aplikacije.
# Enabling JIT in php.ini
opcache.enable=1
opcache.jit_buffer_size=100M
opcache.jit=tracing
Imajte u vidu da je JIT još uvek nov i još samo pre nekoliko dana su izdati fix-ovi zaevidentirane bagove.
Union tipovi
Union tipovi produžavaju tipove deklaracija (return tipovi, parametri i svojstva klasa) da bi deklarisali više od jednog tipa.
function parse_value(string|int|float): string|null {}
Takođe, podržavaju i false kao poseban tip (za Bulov false).
Null-safe operator
Ovaj operator obezbeđuje sigurnost u vezivanju metoda/svojstava gde vrednost ili svojstvo koje vraća mogu biti null
return $user->getAddress()?->getCountry()?->isoCode;
Ovaj operator prespaja ostatak izraza ako se sretne sa vrednosšću null i istog trenutka vraća null bez izazivanja greške.
Match izrazi
Match izrazi su slični svitch blokovima, s tim što match blokovi ne zahtevaju break statement-e da bi napravili prekid i podržavaju višestruko poklapanje vrednosti.
$response = match('test') {
'test' => $this->sendTestAlert(),
'send' => $this->sendNuclearAlert(),
};
Treba imati u vidu da nije moguće svaki switch blok konvertovati u match blok. Tako kod koji zahteva reverzibilnu kompatibilnost, kao i switch blokovi sa višestrukim statement-ima zahtevaju i dalje switch statement-e.
Sve ove navedene funkcionalnosti su samo mali deo novina koje su nam stigle sa PHP 8.0. Ukoliko želite da detaljnije saznate sve o novinama koje dolaze sa verzijom PHP 8.0 posetite PHP.Watch.