PHP 8.0 sa JIT kompajlerom i mnogo poboljšanja

Najnovija PHP 8.0 verzija je podržana na svim SuperHosting.RS serverima.

Ova verzija je osnovna verzija programskog jezika PHP. To je skriptni jezik na kom je napisan WordPress (najpoznatiji CMS).

Osnovne verzije PHP-a su malo interesantnije od minornih jer sa sobom nose veće i dugoočekivane novine, vrše se suštinska poboljšanja i uklanjaju se deprecated (zastarele) funkcije.

Tako je, na primer, u prethodnoj osnovnoj verziji PHP 7.0 obnovljen Zend Engine na novu i bržu verziju 3. Ovo je bila strateška novina koja je dala mogućnosti za još više poboljšanja jezika.

U PHP 8.0 možemo da vidimo jedan veliki dodatak koji, takođe, možemo da definišemo kao stratešku novost – JIT (Just In Time) kompajler. Osim njega, nova verzija nosi i mnogo drugih poboljšanja u samom jeziku, njegovoj produktivnosti i bezbednosti.

JIT kompajler

PHP je skriptni jezik čiji se kod izvršava interpretiranjem. To znači da se, kako bi PHP aplikacija radila, prevodi izlazni kod od PHP interpretatora (Zend VM) do bajt-koda, a nakon toga, do mašinskog koda koji se čita od procesora.

Ova konverzija PHP koda do mašinskog koda se izvršava putem PHP interpretatora prilikom svakog ispunjavanja određene skripte, za razliku od programskih jezika, kao, na primer, C, gde je kod aplikacije prethodno kompajlovan do fajla koji sadrži mašinski kod (na primer: Windows .exe fajlovi).

Just In Time („U pravo vreme“) kompajler prevodi bajt-kod na mašinski kod. JIT je implementovan kao deo OPCache-a. Kako bi se koristio JIT, potrebno je da OPCache bude aktiviran. Mašinski kod se kešira od strane OPCache-a i može direktno da se ispunjava od strane procesora. Ovo isključuje potrebu za prethodnom interpretacijom koda od PHP interpretatora, pa se samim tim to pozitivno odražava na brzinu ispunjenih zadataka. Ovo poboljšanje će se odraziti na svakakve funkcije koje vrše računske zadatke.

Veliko ubrzanje u ispunjavanju koda je izvanredno kada je u pitanju produktivnost PHP-a. Ali…ima jedno ALI. Mnogo mali deo koda veb-aplikacija koje se masovno koriste (na primer, WordPress) se koristi za proračune. Skripte ovih aplikacija se uglavnom koriste za ulazno-izlazne zadatke (IO) – obrađivanje HTTP zahteva, iščekivanje odgovora od baza podataka i sl. Zbog toga trenutno prednosti JIT-a u masovnim veb-aplikacijama nisu toliko vidljive. To znači da u skorije vreme nećemo videti ubrzano učitavanje veb-sajtova samo zbog JIT-a.

Relativno poboljšanje od JIT-a u produktivnost PHP 8.0 (php.net).

Sa testova produktivnosti PHP 8.0 možemo da ustanovimo da je stanje poprilično isto kao na PHP 7.4 za uobičajene veb-aplikacije.

JIT ubrzanje računskih funkcija se može videti u video snimku koji je kreirao Zeev Suraski (Zeev+Andi=Zend)https://youtu.be/dWH65pmnsrI.

Iako trenutno JIT ne nosi sa sobom mnogo koristi kada su u pitanju veb-aplikacije poput WordPress-a, na njega se može gledati kao na stratešku novinu u jeziku. Sa njim se otvaraju mnoga vrata PHP-u, na primer, korišćenje jezika u oblastima koji zahtevaju kompleksne računske radnje.

Imenovani argumenti

U PHP 8 argumenti funkcija mogu da se daju kada se imenuje kakva se vrednost daje određenom argumentu.

Na taj način može da se izostave opcioni parametri i da se preskače red davanja parametara.

Primer

Pre:

htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);

Sada:

htmlspecialchars($string, double_encode: false);

Druga funkcija pokazuje da su dati prvi i četvrti parametar, a izostavljena dva parametra u sredini: $flags и $encoding.

Imenovanje parametara dozvoljava da se ne dodaju u redu u kom su definisani.

I još


Atributi

Umesto dosadašnjih anotacija sa PHPDoc, sada atributi mogu da se koriste u kodu za čuvanje i korišćenje strukturisanih podataka.

Atributi se prilažu klasama, metodama klasa, funkcijama, parametrima i konstantama.

Podaci koji su zapisani kao atribut mogu da se čitaju runtime sa Reflection API-jem u PHP-u.

Constructor property promotion

U novom PHP-u je napravljeno novo pojednostavljenje, pomoću kog se piše manje koda za definisanje property-ja na klase. Oni mogu da se deklarišu samo jednom u konstruktoru klasa.

Primer:

class Point {
  public function __construct(
    public float $x = 0.0,
    public float $y = 0.0,
    public float $z = 0.0,
  ) {}
}

Ovo pojednostavljenje ima za cilj da programeri pišu manje koda i da lakše inicijalizuju svoje promenljive.

Nullsafe operator

PHP 7 je uveo nullsafe operator sa pojednostavljenom sintaksom za upravljanje null vrednostima.

Primer:

$а = $array['data']??'';

Ovaj skraćeni zapis je zgodan u situacijama u kojim data promenljiva nije definisana ili joj je vrednost null.

U PHP 8 je ova mogućnost dodata i za karakteristike date klase.

Primer:

$country = $session?->user?->getAddress()?->country;

Ova sintaksa štedi dosta provera sa if-om, olakšava pisanje koda i ima za cilj da minimalizuje greške prilikom rada sa aplikacijom.

WordPress i PHP 8

Iako je jezgro WordPressa od verzije 5.6 kompatibilno sa novom verzijom PHP 8.0, isto ne može da se tvrdi za sve postojeće plaginove i teme.

Ako vaš sajt koristi teme ili plaginove koji nisu eksplicitno objavili da podržavaju PHP 8.0, onda nije preporučljivo da ga aktivirate.

Možete da napravite eksperiment sa svojim sajtom na njegovoj odvojenoj (test) kopiji. Ako rešite da probate novu verziju PHP-a, preporučujemo vam da to bude na test kopiji.


Magdalena Vasev
Marketolog u IT-ju, IT-jevka u marketingu: Magdalena ima mnogo nadimaka i još više interesovanja. Razapeta između kreativnosti i logike, trudi se da svakodnevno nauči nešto novo i u istoj meri naučeno podeli sa drugima. Diše digitalno - živi socijalno.
0 0 votes
.
Pretplata
Obavesti me ukoliko
guest
0 Comments
Inline Feedbacks
View all comments