Pas një viti zhvillimi, është prezantuar lëshimi i gjuhës së programimit PHP 8.1. Kjo dege e re përmban një seri mundësish të reja, si dhe disa ndryshime që thyejnë kompatibilitetin.
Përmirësimet kryesore në PHP 8.1:
- Shtuar mbështetje për enumeracionet, për shembull, tani është e mundur të përdoren konstruksione të tilla: enum Status { case Pending; case Active; case Archived; } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // ⊠} } $post->setStatus(Status::Active);
- Shtuar mbështetje për fibra të lehta, të njohura si fibra (Fiber), të cilat lejojnë menaxhimin e rrjedhave të ekzekutimit në një nivel të ulët. Mbështetje për fibra pritet të shtohet në framework-et Amphp dhe ReactPHP. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('pas pezullimit'); // ⊠}); $valueAfterSuspending = $fiber->start(); $fiber->resume('pas rifillimit');
- Implementimi i caching-ut për kodin objektor (opcache) është përmirësuar, duke ofruar mundësinë e caching-ut të informacionit rreth trashëgimisë së klasave. Optimizimi lejon rritjen e performancës së disa aplikacioneve me 5-8%. Mes optimizimeve të tjera përmendet optimizimi i punës së JIT, implementimi i mbështetjes JIT për arkitekturën ARM64 (AArch64), përshpejtimi i zgjidhjes së emrave, optimizimi i bibliotekave timelib dhe ext/date, rritja e performancës së serializimit dhe deserializimit, si dhe optimizimi i funksioneve get_declared_classes(), explode(), strtr(), strnatcmp(), dechex(). Në përgjithësi, përmirësimi i performancës së Symfony Demo është 23.0%, ndërsa për WordPress 3.5%.
- Operatori i spastrimit brenda ARRAVE «âŠ$var», i cili lejon zĂ«vendĂ«simin e Arrave ekzistuese gjatĂ« pĂ«rcaktimit tĂ« njĂ« array tĂ« ri, Ă«shtĂ« zgjeruar me mbĂ«shtetje pĂ«r çelĂ«sat string (mĂ« parĂ« mbĂ«shteteshin vetĂ«m identifikuesit numerikĂ«). PĂ«r shembull, tani mund tĂ« pĂ«rdoret nĂ« kod: $array1 = ["a" => 1]; $array2 = ["b" => 2]; $array = ["a" => 0, âŠ$array1, âŠ$array2]; var_dump($array); // ["a" => 1, "b" => 2]
- ĂshtĂ« e lejuar tĂ« pĂ«rdoret fjala kyçe "new" nĂ« inicializues, pĂ«r shembull, nĂ« pĂ«rkufizimet e funksioneve si parametĂ«r default ose nĂ« atributet e argumenteve. class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
- ĂshtĂ« ofruar mundĂ«sia pĂ«r tĂ« shĂ«nuar pronat e klasĂ«s pĂ«r qasje vetĂ«m leximi (informacioni nĂ« kĂ«to prona mund tĂ« shkruhet vetĂ«m njĂ« herĂ«, pas sĂ« cilĂ«s nuk do tĂ« jetĂ« e aksesueshme pĂ«r ndryshim). class PostData { public function __construct( public readonly string $title, public readonly DateTimeImmutable $date, ) {} } $post = new Post(âTitulliâ, /* ⊠*/); $post->title = âTjetĂ«râ; > Gabim: Nuk mund tĂ« modifikoni pronĂ«n e leximit tĂ« vetĂ«m Post::$title
- ĂshtĂ« implementuar njĂ« sintaksĂ« e re pĂ«r objektet e thirrjes (callable) â tani mund tĂ« formohet njĂ« mbyllje duke thirrur njĂ« funksion dhe duke kaluar njĂ« vlerĂ« "âŠ" si argument (p.sh. myFunc(...) nĂ« vend tĂ« Closure::fromCallable(âmyFuncâ)): function foo(int $a, int $b) { /* ⊠*/ } $foo = foo(...); $foo(a: 1, b: 2);
- ĂshtĂ« shtuar mbĂ«shtetje e plotĂ« pĂ«r llojet e prera (intersection types), duke lejuar krijimin e llojeve tĂ« rinj pĂ«rmes kombinimit tĂ« llojeve ekzistues. NĂ« ndryshim nga llojet union, tĂ« cilat pĂ«rcaktojnĂ« koleksione nga dy ose mĂ« shumĂ« lloje, llojet e prera kĂ«rkojnĂ« qĂ« tĂ« jetĂ« e pranishme nĂ« grupin e plotĂ«sueshĂ«m jo njĂ« lloj prej atyre tĂ« pĂ«rmendura, por tĂ« gjitha llojet e specifikuara. function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
- Një lloj i ri «never» është shtuar, i cili mund të përdoret për të informuar analizatorët static në lidhje me faktin se funksioni ndalon ekzekutimin e programit, për shembull, duke thirrur një përjashtim ose duke ekzekutuar funksionin exit. function dd(mixed $input): never { exit; }
- ĂshtĂ« propozuar njĂ« funksion i ri array_is_list, qĂ« pĂ«rcakton nĂ«se çelĂ«sat nĂ« njĂ« array janĂ« tĂ« renditur nĂ« rritje numerike, duke filluar nga 0: $list = [«a», «b», «c»]; array_is_list($list); // true $notAList = [1 => «a», 2 => «b», 3 => «c»]; array_is_list($notAList); // false $alsoNotAList = [«a» => «a», «b» => «b», «c» => «c»]; array_is_list($alsoNotAList); // false
- Tani mund të përdoret fjalëkyçi «final» për të ndaluar tejkalimin e konstantave të klasës prind. class Foo { final public const X = «foo»; } class Bar extends Foo { public const X = «bar»; > Fatal error: Bar::X nuk mund të tejkalojë konstanten finale Foo::X }
- Funksionet fsync dhe fdatasync janë propozuar për të ruajtur me forcë ndryshimet nga memoria e diskut. $file = fopen(«sample.txt», «w»); fwrite($file, «Disa përmbajtje»); if (fsync($file)) { echo «Skedari është ruajtur me sukses në disk.»; } fclose($file);
- ĂshtĂ« shtuar mundĂ«sia e pĂ«rdorimit tĂ« parafiseve «0o» dhe «0O» pĂ«r numrat oktal, pĂ«rveç parafisit tĂ« mĂ«parshĂ«m «0». 016 === 0o16; // true 016 === 0O16; // true
- Propozohet të kufizohet selektivisht përdorimi i $GLOBALS, që do të çojë në një shkelje të përputhshmërisë, por do të mundësojë një rritje të dukshme të operacioneve me tabela. Për shembull, po shqyrtohet mundësia e ndalimit të shkrimit në $GLOBALS dhe kalimit të $GLOBALS me referencë. Analiza e 2000 paketave tregoi se vetëm 23 prej tyre do të preken nga ky ndryshim. Për shembull, në rastin e miratimit të propozuar në 8.1 do të ndërpritet mbështetje për shprehje të tilla si: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
- Metodat e brendshme tani duhet të kthejnë një tip të saktë. Në PHP 8.1, kur kthehet një tip që nuk përputhet me deklaratën e funksionit, do të shfaqet një paralajmërim, por në PHP 9.0, paralajmërimi do të zëvendësohet me një gabim.
- Punët kanë vazhduar për të kaluar funksionet nga përdorimi i burimeve në manipulimin e objekteve. Funksionet finfo_* dhe imap_* janë kaluar në objekte.
- Kalimi i vlerave null si argumente në funksionet e brendshme, të shënuara si non-nullable, është shpallur të jetë i menduar si i vjetruar. Në PHP 8.1, përdorimi i konstruktimeve si str_contains("string", null) do të çojë në një paralajmërim, dhe në PHP 9 në një gabim.
- është shtuar mbështetje për algoritmet e hash-it MurmurHash3 dhe xxHash.
Burimi: opennet.ru
