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

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

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster