Lëshimi i gjuhës së programimit PHP 8.4

Pas një vit zhvillimi, është lancuar versioni i gjuhës së programimit PHP 8.4. Ky degë përmban një sërë mundësish të reja, si dhe disa ndryshime që shkelin përputhshmërinë.

Ndryshimet kyçe në PHP 8.4:

  • Propozohet njĂ« implementim i ri tĂ« kompilatorit JIT, i ndĂ«rtuar mbi bazĂ«n e IR Framework. Dallimi kryesor Ă«shtĂ« se JIT-i i vjetĂ«r gjeneronte drejtpĂ«rdrejt instrukcione makine mbi bazĂ«n e kodit bajt dhe duke pĂ«rdorur backend tĂ« ndryshĂ«m pĂ«r arkitekturĂ«n x86_64 dhe AArch64, ndĂ«rsa JIT-i i ri pĂ«rdor njĂ« backend tĂ« pĂ«rbashkĂ«t pĂ«r tĂ« gjitha arkitekturat dhe gjeneron njĂ« pĂ«rfaqĂ«sim tĂ« ndĂ«rmjetĂ«m (IR), i cili mĂ« pas optikohet dhe transformohet nĂ« instrukcione makine pĂ«r platformĂ«n e caktuar.
  • ËshtĂ« shtuar mbĂ«shtetje pĂ«r ngjitjen e trajtuesve tĂ« pronave (property hook), qĂ« lejojnĂ« shtimin e logjikĂ«s shtesĂ«, e cila ekzekutohet gjatĂ« ndryshimit ose aksesit nĂ« pronat e objekteve, e realizuar pa ndĂ«rhyrjen nĂ« operacionet e leximit dhe shkrimit pĂ«rmes funksioneve tĂ« zakonshme __get dhe __set, dhe pa krijimin e metodave tĂ« tjera mbĂ«shtetĂ«se. PĂ«rdorimi i trajtuesve tĂ« pronave ofron mundĂ«sinĂ« pĂ«r tĂ« reduktuar ndjeshĂ«m volumet e kodit dhe pĂ«r tĂ« thjeshtuar riangazhimin e sjelljes sĂ« punĂ«s me pronat, falĂ« lidhjes sĂ« trajtuesit tĂ« vet me çdo pronĂ«. class User { public string $name { set { if (strlen($value) === 0) { throw new ValueError(«Emri duhet tĂ« jetĂ« i paprazë»); } $this->name = $value; } } public function __construct(string $name) { $this->name = $name; } }
  • Lejohet caktimi i referencave nĂ« metoda nĂ« konstruksionin «new» pa kllapa ndarĂ«se, domethĂ«nĂ«, nĂ« vend tĂ« «$name = (new MyClass())->method()» tani mund tĂ« ceket «$name = new MyClass()->method()».
  • Shtohet mundĂ«sia pĂ«r njĂ« menaxhim asimetrik tĂ« dukshmĂ«risĂ« sĂ« pronave tĂ« objekteve (public, private, protected), veçmas pĂ«r operacionet e shkrimit (set) dhe leximit (get). PĂ«r shembull: class PhpVersion { public private(set) string $version = ‘8.4’; } $phpVersion = new PhpVersion(); var_dump($phpVersion->version); // string(3) «8.4» $phpVersion->version = ‘PHP 8.3’; // gabim
  • Ofron mbĂ«shtetje standard pĂ«r objektet «lenkë» (lazy), i cili inicializohet nĂ« momentin e pĂ«rdorimit tĂ« parĂ«.
  • NĂ« vend tĂ« parametrave tĂ« pĂ«rgjithshĂ«m «opcache.jit_buffer_size» pĂ«r menaxhimin e kompilatorit JIT dhe caktimin e madhĂ«sisĂ« sĂ« buffers JIT, janĂ« propozime parametra tĂ« rinj «opcache.jit» dhe «opcache.jit_buffer_size». PĂ«r tĂ« çaktivizuar JIT tani mund tĂ« ceket «opcache.jit=disable» nĂ« vend tĂ« «opcache.jit_buffer_size=0». JanĂ« bĂ«rĂ« ndryshime qĂ« reduktojnĂ« konsumimin e memories dhe rrisin performancĂ«n e JIT nĂ« disa situata.
  • Shtuar atributi «#[\Deprecated]», i destinuar pĂ«r tĂ« shĂ«nuar funksione, klasa dhe metoda tĂ« skaduara. #[\Deprecated(«pĂ«rdorni newFunction() nĂ« vend» , from: «1.1»)] function oldFunction() { // 
 }
  • Implementuar klasa \Dom\HTMLDocument, qĂ« mbĂ«shtet analizimin e saktĂ« tĂ« markup-it HTML5.
  • Shtuar funksioni request_parse_body() pĂ«r analizimin e kĂ«rkesave HTTP me llojin e pĂ«rmbajtjes multipart/form-data (RFC1867).
  • Shtuar funksionet array_find(), array_find_key(), array_any() dhe array_all(). Funksionet array_find() dhe array_find_key() kthejnĂ« elementin ose çelĂ«sin e parĂ« nĂ« array, pĂ«r tĂ« cilat Ă«shtĂ« aktivizuar kontrolli i caktuar pĂ«rmes njĂ« funksioni callback tĂ« pĂ«rdoruesit. Nga ana tjetĂ«r, funksionet array_any() dhe array_all() kthejnĂ« çdo element qĂ« pĂ«rputhet dhe tĂ« gjithĂ« elementĂ«t qĂ« pĂ«rputhen. PĂ«r shembull, pĂ«r tĂ« shfaqur elementin e parĂ«, ku madhĂ«sia e fushĂ«s titull Ă«shtĂ« mĂ« e madhe se 5 shenja, mund tĂ« cekni: $firstMatch = array_find( $posts, function (Post $post) { return strlen($post->title) > 5; } );
  • Shtuar metodat DateTime::getMicrosecond() dhe DateTimeImmutable::setMicrosecond($microsecond) pĂ«r marrjen dhe vendosjen e kohĂ«s me saktĂ«si mikroseondash, si dhe metodĂ«n DateTime::createFromTimestamp().
  • NĂ« PDO (PHP Data Objects), ndĂ«rfaqja abstrakte pĂ«r tĂ« punuar me bazat e tĂ« dhĂ«nave, Ă«shtĂ« shtuar mundĂ«sia pĂ«r krijimin e parserĂ«ve SQL dhe nĂ«nklasave specifike pĂ«r drejtues tĂ« caktuar tĂ« DB. Shtuar nĂ«nklasa tĂ« reja Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc dhe Pdo\Sqlite.
  • Shtuar funksionet e reja mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), mb_lcfirst(), bcceil(), bcdivmod(), bcfloor() dhe bcround(), pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns(), pcntl_waitid(), http_get_last_response_headers(), http_clear_last_response_headers(), fpow()
  • Operacionet exit dhe die tani mund tĂ« thirren nĂ« formĂ«n e funksioneve tĂ« plota, tĂ« cilat lejohet tĂ« kalohen si argument nĂ« funksione tĂ« tjera. MĂ« parĂ«, mundĂ«sitĂ« e funksioneve exit() dhe die() ishin shumĂ« tĂ« kufizuara, pasi ato pĂ«rfaqĂ«sonin vetĂ«m lidhje mbi fjalĂ« kyçe exit dhe die.
  • Shtuar ndryshime qĂ« e bĂ«jnĂ« mĂ« tĂ« vĂ«shtirĂ« shfrytĂ«zimin e dobĂ«sive tĂ« shkaktuara nga tejkalimi i buffers, si dhe forcuar randomizimin e emrave tĂ« skedave tĂ« krijuara pĂ«rmes funksionit tempnam().
  • Ushtrimi i sjelljes ka shpallur tĂ« vjetruar, kur pĂ«r parametrat e funksioneve me njĂ« vlerĂ« tĂ« caktuar paraprakisht null, lejohej automatikisht caktohen vlerat null. PĂ«r tĂ« mundĂ«suar qĂ« kĂ«ta parametra tĂ« pranojnĂ« vlera null tani kĂ«rkohet njĂ« tregues i qartĂ« prefixi "?". PĂ«r shembull, nĂ« vend tĂ« "function save(Book $book = null) {}" duhet tĂ« thuhet "function save(?Book $book = null) {}".
  • JanĂ« shpallur tĂ« vjetruara konstantet E_STRICT, MYSQLI_REFRESH_*, funksionet mysqli_ping(), mysqli_kill(), mysqli_refresh(), metodat mysqli::ping(), mysqli::kill(), mysqli::refresh(), mundĂ«sia e pĂ«rdorimit tĂ« "_" si emĂ«r klase, disa prona DOMDocument dhe DOMEntity. ËshtĂ« e ndaluar ta tejkalosh konstantet e klasĂ«s GMP, pĂ«r tĂ« cilin tani Ă«shtĂ« vendosur fjala kyçe "final".

Për më tepër, mund të theksohet lëshimi i analizatorit statik PHPStan 2.0, që lejon gjetjen e gabimeve në kodin PHP pa e ekzekutuar atë dhe pa përdorur testet unitare. Analizatori ofron 10 nivele, që mbulojnë fusha të tilla si identifikimi i variablave të papërcaktuar, klasave të panjohura, funksioneve dhe metodave; kontrolli i tipeve të argumenteve dhe vlerave të kthimit; saktësia e përdorimit të disa tipeve; identifikimi i kodit të cilin nuk e thërras asnjëherë. Kodi i projektit është shkruar në gjuhën PHP dhe shpërndahet nën licencën MIT.

Burimi: opennet.ru

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster