25.11.2021. – tačno godinu dana nakon verzije 8.0 izašla je i PHP 8.1 verzija, koja pored novina u sintaksi donosi i znatno veću brzinu.
Sa gledišta vlasnika sajta koji koristi Laravel ili WordPress, bitno je napomenuti, budući da je 8.1 i dalje novitet, većina plugina i dodataka nije detaljno testirana ili kompatibilna sa novom verzijom, te ukoliko se sada odlučite za prelazak na PHP 8.1, dobro istestirajte funkcionalnost sajta.
UNLIMITED.RS je na većinu servera implementirao PHP 8.1 te već sada možete testirati svoje aplikacije.
PHP 8.1 uvodi Enums, jedne od najčešće zahtevanih i najisčekivanijih stvari za PHP jezik. Takođe uvode se i Fibers, koji su najznačajniji korak ka odvajanju PHP-a od tradicionalnog zahtev-odgovor obrasca.
Zahvaljujući više optimizacija unutar samog PHP jezika, brzina renderovanja stranice je umnogome unapređeno. PHP navodi da je poboljšanje od čak 23% na Symphony Demo Aplikaciji i 3.5% na WordPress instalaciji (iako poslednja verzija WordPress-a još uvek zvanično ne podržava PHP 8.1). Bitna napomena je da za razliku od PHP 8.0 ova poboljšanja sada ne zavise od upotrebe JIT (just-in-time) kompajlera, već od samog koda PHP 8.1.
Takođe, autor Dmitry Stogov je objavio da je na 8.1 verziji od 5-8% poboljšanje performansi za opcache modul, poboljšanje koje naziva “inheritance cache”. Ovi noviteti omugućavaju keširanje linkova između klasa, slično preučitavanju klasa na verziji 7.4
Bolja brzina renderovanja stranice nije jedini novitet na PHP 8.1 verziji. Postoji više novih funkcija a ovo su samo neke od njih:
Enumeracije ili skraćeno Enums su brojivi tip sa fiksnim brojem vrednosti. Primer za predefinisane Enums je špil karata sa četiri simbola koji su nepromenjivi: tref, pik, herc, karo.
primer deklarisanje Enums:
enum Suit { case Clubs; case Diamonds; case Hearts; case Spades; }
Sa Suit Enumom sada možemo navesti tipove prilikom korišćenja Suit vrednosti:
function pick_card(Suit $suit) {}
pick_card(Suit::Clubs);
pick_card(Suit::Diamonds);
pick_card(Suit::Hearts);
pick_card(Suit::Spades);
Fibers ili “zeleni threadovi” su vrlo koristan način za startovanja/stopiranja dela koda, i tako paralelno izvršavanje više stvari. Popularni framework kao što su Amphp i ReactPHP će dosta korisitti Fibers u budućnosti zbog svoje praktičnosti i brzine.
Slikoviti prikaz upotrebe Fibera možemo pokazati slanjem 3 zahteva ka drugom serveru, svaki zahtev ima svoju boju, obojeni deo je vreme izvršavanja koda, dok je isprekidani deo vreme čekanja na odgovor od servera ka kome šaljemo zahtev.
U PHP verzijama do 8.0 izvršavanje ovih istovremenih zahteva izgleda ovako:
Dakle svaki naredni zahtev čeka da se prethodni završi.
Dok od PHP 8.1 sa Fibers ovo izvršavanje zahteva je istovremeno i time se smanjuje vreme izvršavanja jer se optimalnije koristi vreme čekanja.
Paralelno izvršavanje je i do sada bilo moguće na PHP-u upotrebom yield i generatora, međutim Fibers donose drastično unapređenje jer su dizajnirani upravo za ovu upotrebu.
Readonly vrednosti mogu biti samo čitane, dakle definišu se jednom i više ne menjaju vrednost.
Primer:
class PostData {
public function __construct(
public readonly string $title,
public readonly DateTimeImmutable $date,
) {}
}
Prilikom pokušaja promene Readonly propety javlja se greška
$post = new Post('Title', /* … */);
$post->title = 'Other';
Error: Cannot modify readonly property Post::$title
Kao što smo ranije napomenuli, lista novih funkcija na PHP 8.1 verziji je poprilična i da bismo svaku pojedinačno naveli trebalo bi nam više od jednog teksta, te ćemo samo nabrojati one vredne pomena:
▪ never tip
▪ final klasne konstante
▪ fsync i fdatasync funkcije
▪ array_is_list funkcija
▪ $_FILES: nova full_path vrednost za dodavanje fajlova
▪ MYSQLI_REFRESH_REPLICA nova MySQLi konstanta – reč replica umesto rasno neprihvatljive reči slave
Za sve UNLIMITED.RS Web hosting korisnike na cPanelu će unutar PHP selektora uskoro biti dostupna verzija PHP 8.1 te će svi koji su zainteresovani moći da je koriste na svojim sajtovima.
Uputstvo za promenu PHP verzije možete videti ovde: Kako da promenim PHP verziju ili uključim ekstenziju?
I na kraju, lista depricated funkcija, INI direktiva i metoda:
▪ mysqli::get_client_info method, mysqli_get_client_info($param)
▪ Serializable
▪ date_sunrise, date_sunse
▪ strptime
▪ mhash*()
▪ filter.default, filter.default_options
▪ PDO::FETCH_SERIALIZE
▪ auto_detect_line_endings
▪ strftime, gmstrftime
▪ mysqli_driver->driver_version
Pošto mi je WordPress sajt, znam da nemaju verziju na novi PHP 8.1, da li ja mogu da primenim pvu novu verziju na zadnji ažurirani wordpress, koji je i dalje za 7 komtibilan? Hvala na odgovpru.
Naš savet je da testirate, a ako sajt ne bude funkcionisao najlakše je vratiti na raniju verziju, promena se odvija za par sekundi. WordPress 5.8 definitivno podržava PHP 8.1, ali 90% plugina i tema još nije prilagođeno, pogotovo manje poznati.