php 8.0

PHP 8.0 – šta je novo?

27 новембра, 2020

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.

 

Slični postovi:

Bez komentara

Оставите одговор

Ваша адреса е-поште неће бити објављена. Неопходна поља су означена *