Pas një viti zhvillimi, është publikuar versioni i gjuhës së programimit PHP 8.5. Kjo degë e re përmban një sere mundësish të reja, si dhe disa ndryshime që shkelin pajtueshmërinë.
Ndryshimet kryesore në PHP 8.5 (1, 2, 3):
- ĂshtĂ« shtuar operatori «|>» (pipe), i cili lejon kalimin e vlerave nga njĂ« funksion nĂ« tjetrin pa pĂ«rdorimin e ndarjeve dhe variablave tĂ« ndĂ«rmjetĂ«m, duke pĂ«rdorur rezultatin e njĂ« funksioni si parametĂ«r nĂ« funksionin tjetĂ«r. NĂ«se funksioni ka njĂ« argument, parametrat pĂ«r kalim tĂ« vlerĂ«s zgjidhen me treguesin «âŠÂ», dhe nĂ«se funksioni ka disa argumente, zĂ«vendĂ«simi bĂ«het me mbyllje. PĂ«r shembull, kodi i mĂ«poshtĂ«m: $output = $input |> trim(âŠ) |> fn (string $string) => str_replace(' ', '-', $string) |> fn (string $string) => str_replace(['.', '/', 'âŠ'], '', $string) |> strtolower(âŠ); Ă«shtĂ« ekuivalent me: $temp = trim($input); $temp = str_replace(' ', '-', $temp); $temp = str_replace(['.', '/', 'âŠ'], '', $temp); $output = strtolower($temp); ose: $output = strtolower( str_replace(['.', '/', 'âŠ'], '', str_replace(' ', '-', trim($input)) ) );
- ĂshtĂ« ofruar mbĂ«shtetje pĂ«r caktimin e vlerave tĂ« reja pĂ«r objektet e klonuara gjatĂ« klonimit, pĂ«rmes kalimit nĂ« funksionin clone() tĂ« njĂ« vargu asociativ. public function withTitle(string $title): self { return clone($this, [ 'title' => $title, ]); }
- ĂshtĂ« shtuar atributi «#[NoDiscard]», i cili mund tĂ« pĂ«rdoret pĂ«r tĂ« dalĂ« me funksione, vlerat e kthimit tĂ« tĂ« cilave gjithmonĂ« duhet tĂ« pĂ«rdoren. NĂ«se vlera e kthyer nga njĂ« funksion i tillĂ« injorohet, interpretuese do tĂ« lĂ«shojĂ« njĂ« paralajmĂ«rim. PĂ«r tĂ« anashkaluar kontrollin, mund tĂ« pĂ«rdoret thirrja me konvertimin nĂ« tipin void. #[NoDiscard('duhet tĂ« pĂ«rdorni kĂ«tĂ« vlerĂ« kthimi.')] function foo(): string { return 'hi'; } foo(); // lĂ«shon paralajmĂ«rem (void) foo(); // Ok $string = foo(); // Ok
- Lejohet përdorimi i mbylljeve (closures) dhe objekteve të thirrjes së klasit të parë (first-class callables) në shprehje konstante, ku më parë ishte e lejueshme të specifikoheshin vlerat e pandryshueshme, të llogaritura gjatë kompilimit. Për shembull, tani mund të specifikoni mbyllje në atributet, vlerat e paracaktuar dhe konstantat. Mbylljet e përdorura në këtë mënyrë gjithmonë duhet të shënohen me fjalën kyçe «static» dhe nuk mund të referohen në variablat e jashtme me shprehjen «use». #[SkipDiscovery(static function (Container $container): bool { return ! $container->get(Application::class) instanceof ConsoleApplication; })]
- Kur ndodhin gabime fatale, tani teksti i mesazhit lidhet me një gjurmë kthimi (backtrace) të thirrjeve.
- Janë shtuar funksionet array_first() dhe array_last(), që nxjerrin elementin e parë dhe të fundit të vargut. Për shembull, në vend të: $first = $array[array_key_first($array)] ?? null; tani mund të shkruani: $first = array_first($array);
- ĂshtĂ« shtuar moduli URI, i cili ofron njĂ« API tĂ« thjeshtuar pĂ«r analizimin e lidhjeve. Analiza bĂ«het pĂ«rmes bibliotykave uriparser dhe lexbor. use Uri\Rfc3986\Uri; $uri = new Uri('https://opennet.me/64290'); $uri->getHost(); // opennet.me $uri->getScheme(); // https://
- ĂshtĂ« realizuar atributi «#[DelayedTargetValidation]», me tĂ« cilin mund tĂ« zhvendosni verifikimin e atributeve, si «#[Override]», nga faza e kompilimit nĂ« fazĂ«n ekzekutimit. #[DelayedTargetValidation] #[Override] public const NAME = 'Child';
- Janë shtuar funksionet get_error_handler() dhe get_exception_handler() për të përcaktuar funksionet me menaxherët e gabimeve dhe përjashtimeve.
- Në modulin Curl është implementuar funksioni curl_share_init_persistent(), i cili lejon ndarjen e deskriptorëve gjatë trajtimit të kërkesave të ndryshme.
- Në modulin Exif është shtuar mbështetje për imazhet në formate HEIF dhe HEIC.
- Janë shpallur të vjetra: sintaksa jo standarde e konvertimit të emrave të tipeve (p.sh., '(integer)' në vend të '(int)'); përdorimi i thonjëzave të prapme (`) për thirrjen e komandave në vend të shell_exec(); ri-deklarimi i konstantave; përdorimi i pikës së ndërprerjes në vend të dy pikave për përfundimin e operatorëve case; specifikimi i null në vend të një string të zbrazët në vargje ose në funksionin array_key_exists(). Nga skedari ini është fshirë mbështetja për konfigurimin «disabled_classes».
Burimi: opennet.ru
