PHP 8 – Kakšne so novosti

PHP 8.0 je glavna posodobitev različice in izjemen mejnik v PHP, saj prinaša več novih funkcij za tipe sistema, nove sintakse funkcij, obdelavo napak, nize, objektno usmerjeno programiranje in še več.

Prizadevanja stotine ljudi, ki se združujejo, da oblikujejo prihodnost programskega jezika, poganjajo pomemben del spletnih mest in aplikacij.


PHP poskuša biti konservativen s spremembami, ki lahko uničijo večino aplikacij, vendar pa PHP 8.0 prinaša nekaj novih glavnih funkcij.


Funkcije, kot so imenovani parametri, JIT, atributi in lastnosti konstruktorja, prinašajo velike izboljšave in spremembe sintakse, medtem ko več manjših izboljšav, kot so selitve virov v objekte, izboljšano ravnanje z napakami ter spremembe in izboljšave v operaterjih in primerjavah pogonov, brez težav zmanjšuje možnosti spregledane napake.

Glavne nove funkcije

Poimenovani parametri

PHP 8.0 poleg tradicionalnih pozicijskih parametrov omogoča imenovane parametre v klicih funkcije/metode:

Prej:

if (strpos('string with lots of words', 'words') !== false) { /* … */ }

V PHP 8 je:

if (str_contains('string with lots of words', 'words')) { /* … */ }

Zaradi tega so imena parametrov funkcije/metode del javnega API-ja. Nestandardizirani DocBlock no-named-argument izraža, da knjižnica za poimenovane parametre ne zagotavlja povratne združljivosti.

Lastnosti

Atributi omogočajo deklariranje metapodatkov za funkcije, razrede, lastnosti in parametre. Atributi se preslikajo v imena razredov PHP (razglašena s samim atributom) in jih je mogoče programsko pridobiti z API-jem za odsev PHP:

#[CustomAttribute]
class Foo {
    #[AnotherAttribute(42)]
    public function bar(): void {}
}

Atributi omogočajo enostavno in zmogljivo razglasitev atributov/pripisov, ki so jih prej morali shraniti v komentarje DocBlock, in razčlenjevanje niza, da jih lahko razumemo.

Lastnosti konstruktorja

Nova sintaksa za razglasitev lastnosti razreda neposredno iz konstruktorja razreda (__construct magic metoda):

class User {
    public function __construct(private string $name) {}
}

V konstruktorju PHP 8.0 podpira navedbo vidnosti (javne, zasebne ali zaščitene) in vrste. Te lastnosti bodo registrirane kot lastnosti razreda z enako vidnostjo in vrsto, kot so navedene v konstruktorju.

Ta funkcija, ki ni združljiva za nazaj, lahko pomaga pri zmanjševanju kotlovnice kode vzorca pri razglasitvi razredov predmetov vrednosti.

JIT kompilacija

PHP Opcache podpira JIT. Privzeto je onemogočen, in če je omogočen, JIT prevede in shrani izvorna navodila. V spletnih aplikacijah, vezanih na IO, ni opazne razlike, zagotavlja pa povečanje zmogljivosti za aplikacije, težke za CPU:

# Enabling JIT in php.ini
opcache.enable=1
opcache.jit_buffer_size=100M
opcache.jit=tracing

Potrebno je upoštevati, da je JIT še vedno nov in je imel popravke napak že en dan pred samo izdajo PHP 8.0.0. Z dodano dodatno plastjo otežuje odpravljanje napak in profiliranje.

Vrste unije

Vrste unije razširijo izjave o tipih (vrnejo vrste, parametre in lastnosti razreda), da razglasi več kot en tip:

function parse_value(string|int|float): string|null {}

Podpira tudi false kot poseben tip (za logično vrednost false), lastnost, ki prevladuje v starejši kodi, ki ni uporabljala izjem.

Null-safe operater

Null-safe operater zagotavlja varnost pri veriženju metode/lastnosti, kadar je lahko vrnjena vrednost ali lastnost nična:

return $user->getAddress()?->getCountry()?->isoCode;

? -> null-safe operater kratkoročno poveže preostali del izraza, če naleti na null vrednost, in takoj vrne null, ne da bi povzročil napake.

Izrazi ujemanja

Izrazi ujemanja so podobni preklopnim blokom, vendar ujemajoči se bloki zagotavljajo primerjave, primerne za tipe, podpirajo vrnjeno vrednost, ne zahtevajo stavkov break za ločitev in podpirajo več ujemajočih se vrednosti. Zagotavljajo tudi, da se ujema vsaj ena veja, s čimer se zagotovi, da so vsi primeri upoštevani:

$response = match('test') {
    'test' => $this->sendTestAlert(),
    'send' => $this->sendNuclearAlert(),
};

Vsi bloki stikal morda ne bodo dobro pretvorjeni v bloke ujemanja. Koda, ki zahteva povratno združljivost, preklopi bloke z več stavki (v nasprotju z enovrstnimi izrazi) ali pričakuje, da prehodna funkcionalnost še vedno ustreza stavkom preklopa.

WeakMaps

WeakMaps omogoča shranjevanje in povezovanje poljubnih vrednosti za objektne ključe, vendar ne da bi preprečil, da bi zbiralnik smeti to počistil, objekt povsod drugje ne spada v področje uporabe.

WeakMap je podoben SplObjectStorage, saj tako v WeakMap kot splObjectStorage predmete uporabljata kot ključ in omogoča shranjevanje poljubnih vrednosti. Vendar WeakMap ne preprečuje, da bi predmet zbiral smeti.

WeakMaps lahko pomagajo pri začasnem shranjevanju predmetov, vendar brez vpliva na porabo pomnilnika zaradi samega začasnega shranjevanja. Če se uporabljajo kot predpomnilnik, lahko s ključi predmeta shranite prvotno stanje predmeta in zmanjšate poznejše klice na drago funkcijo, ki naj bi obdelala ali izboljšala predmet.

Drug primer uporabe bi bilo shranjevanje zaključnih podatkov za zbirko predmetov, vendar brez mutacije samega predmeta.

Vpliv povratne združljivosti (Backwards Compabiltity)

WeakMaps so nova funkcija v PHP 8.0 in razen takrat, če obstaja razred z imenom WeakMapin v globalnem imenskem prostoru, pri nadgradnji obstoječe kode na PHP 8.0 ne bi smelo biti težav.

Ker je WeakMap notranji razred, te funkcije ni mogoče prenesti nazaj na prejšnje različice PHP in omogočiti, da deluje z domačim zbiralnikom smeti. Implementacija uporabniškega zemljišča obstaja, vendar z veliko kaznijo glede uspešnosti.

Razširitev PECL z imenom slaveref je ponujala podobno funkcionalnost, vendar je več ne podpira.

Vpliv in združljivost PHP 8 (z WordPressom)

PHP 8 je pomembna posodobitev PHP-ja in WordPress se trudi biti vedno združljiv z novimi različicami PHP-ja.

Seznam PHP verzij, ki so kompatibilne z WordPress.

Podatki glede kompatibilnosti Yoast SEO vtičnika za WordPress.

Odstranjene funkcije

V PHP 8 izdaji je bilo odstranjenih nekaj zastarelih funkcij, ki so še bile aktivne v PHP 5.x in na voljo v PHP 7.x a zdaj dokončno odstranjene z verzijo 8.0.

  • php_errormsg.
  • create_function().
  • mbstring.func_overload.
  • parse_str() without second argument.
  • each().
  • assert() with string argument.
  • $errcontext argument of error handler.
  • String search functions with integer needle.
  • Defining a free-standing assert() function.
  • The real type (alias for float).
  • Magic quotes legacy.
  • array_key_exists() with objects.
  • Reflection export() methods.
  • implode() parameter order mix.
  • Unbinding $this from non-static closures.
  • restore_include_path() function.
  • allow_url_include ini directive.

Več o PHP 8 na uradni strani.


PHP 8 gostovanje

Želite stestirati PHP 8 pri svojem projektu? Pri HOSTKO gostovanje je PHP 8 na voljo v vseh paketih in si ga lahko enostavno aktivirate v nadzorni plošči cPanel.

Vam je članek pomagal?

Povprečna ocena 5 / 5. Ocenilo: 2

Zaenkrat še ni glasov! Bodi prvi, ki bo ocenil to objavo.

Žal nam je, da ta članek za vas ni uporaben!

Let us improve this post!

Želite kaj dodati?