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
