PHP 8.1 programmēšanas valodas izlaidums

Pēc gada izstrādes tika prezentēta PHP 8.1 programmēšanas valodas izlaidums. Jaunajā filiālē ir iekļauta virkne jaunu funkciju, kā arī vairākas izmaiņas, kas traucē saderību.

Galvenie uzlabojumi PHP 8.1 versijā:

  • Pievienots uzskaitījumu atbalsts, piemēram, tagad varat izmantot šādas konstrukcijas: enum Statuss { case Pending; case Active; lieta Arhivēta; } class Post { public function __construct( private Statuss $status = Status::Pending; ) {} public function setStatus(Statuss $statuss): void { // … } } $post->setStatus(Statuss::Active);
  • Pievienots atbalsts viegliem pavedieniem, ko sauc par šķiedrām (fibers), kas nodrošina pavedienu pārvaldību zemā līmenī. Fiber atbalsts ir plānots Amphp un ReactPHP ietvariem. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('pēc apturēšanas'); // … }); $valueAfterSuspending = $fiber->start(); $fiber->resume('pēc atsākšanas');
  • Улучшена реализация кэша объектного кода (opcache), в которой появилась возможность кэширования информации о наследовании классов. Оптимизация позволила поднять производительность некоторых приложений на 5-8%. Из других оптимизаций отмечается оптимизация работы JIT, реализация поддержки JIT для архитектуры ARM64 (AArch64), ускорение разрешения имён, оптимизация библиотек timelib и ext/date, повышение производительности сериализации и десериализации, оптимизация функция get_declared_classes(), explode(), strtr(), strnatcmp(), dechex(). В общем виде отмечается повышение производительности Symfony Demo на 23.0%, а WordPress autors 3.5%.
  • Izpakošanas operators masīvos "...$var", kas ļauj aizstāt esošos masīvus, definējot jaunu masīvu, ir paplašināts, lai atbalstītu virknes atslēgas (iepriekš tika atbalstīti tikai digitālie identifikatori). Piemēram, tagad kodā varat izmantot: $masīvs1 = ["a" => 1]; $masīvs2 = ["b" => 2]; $masīvs = [“a” => 0, …$masīvs1, …$masīvs2]; var_dump($masīvs); // ["a" => 1, "b" => 2]
  • Atslēgvārds "new" ir atļauts inicializatoros, piemēram, funkciju definīcijās kā noklusējuma parametrs vai argumentu atribūtos. class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
  • Tagad klases īpašības var atzīmēt kā tikai lasīšanas piekļuvi (informāciju šādās īpašībām var rakstīt tikai vienu reizi, pēc tam tā vairs nebūs pieejama modificēšanai). class PostData { public function __construct( public readonly string $title, public readonly DateTimeImmutable $date, ) {} } $post = new Post('Title', /* … */); $post->title = 'Cits'; > Kļūda: Nevar modificēt tikai lasīšanas īpašību Post::$title
  • Ir ieviesta jauna sintakse izsaucamiem objektiem — slēgumu tagad var veidot, izsaucot funkciju un nododot tai vērtību "..." kā argumentu (t. i., myFunc(...) Closure::fromCallable('myFunc') vietā): function foo(int $a, int $b) { /* ... */ } $foo = foo(...); $foo(a: 1, b: 2);
  • Ir pievienots pilns atbalsts krustojumu tipiem, kas ļauj izveidot jaunus tipus, apvienojot esošos. Atšķirībā no apvienojumu tipiem, kas definē divu vai vairāku tipu kolekcijas, krustojumu tipiem ir nepieciešams, lai aizpildāmajā kopā būtu visi norādītie tipi, nevis tikai jebkurš no norādītajiem tipiem. function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Ir jauns veids "nekad", ko var izmantot, lai informētu statiskos analizatorus, ka funkcija pārtrauks programmas izpildi, piemēram, izdarot izņēmumu vai izpildot izejas funkciju. function dd(jaukta $input): never { exit; }
  • Ir piedāvāta jauna funkcija masīvs_is_saraksts, kas ļauj noteikt, ka atslēgas masīvā ir sakārtotas skaitlisko vērtību pieauguma secībā, sākot no 0: $list = [“a”, “b”, “c”]; masīvs_is_saraksts($saraksts); // patiess $notAList = [1 => "a", 2 => "b", 3 => "c"]; masīvs_is_saraksts($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; masīvs_is_saraksts($arīNotAList); // viltus
  • Tagad varat izmantot atslēgvārdu "final", lai novērstu vecāku klases konstantu pārrakstīšanu. class Foo { final public const X = "foo"; } class Bar extends Foo { public const X = "bar"; > Fatal error: Bar::X cannot override final constant Foo::X }
  • Fsync un fdatasync funkcijas tiek piedāvātas, lai piespiestu saglabāt izmaiņas no diska kešatmiņas. $fails = fopen("paraugs.txt", "w"); fwrite ($ fails, "Daži saturs"); if (fsync($file)) { echo "Fails ir veiksmīgi saglabāts diskā."; } fclose($fails);
  • Pievienota iespēja izmantot prefiksus "0o" un "0O" oktālajiem skaitļiem, papildus iepriekš lietotajam prefiksam "0". 016 === 0o16; // patiess 016 === 0O16; // taisnība
  • Tiek ierosināts selektīvi ierobežot $GLOBALS izmantošanu, kas novedīs pie atgriezeniskās saderības pārkāpuma, bet ļaus ievērojami paātrināt darbības ar masīviem. Piemēram, tiek apsvērta iespēja atspējot rakstīšanu uz $GLOBALS un nodot $GLOBALS ar rādītāju. 2000 pakotņu analīze parādīja, ka šīs izmaiņas skars tikai 23 no tām. Piemēram, ja priekšlikums tiek apstiprināts, 8.1 vairs neatbalstīs tādas izteiksmes kā: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
  • Iekšējām metodēm tagad ir jāatgriež pareizais tips. PHP 8.1 versijā, atgriežot tipu, kas neatbilst funkcijas deklarācijai, tiktu parādīts brīdinājums, bet PHP 9.0 versijā šis brīdinājums tiks aizstāts ar kļūdu.
  • Turpinājās darbs pie funkciju pārsūtīšanas no resursu izmantošanas uz objektu manipulēšanu. Finfo_* un imap_* funkcijas ir pārsūtītas uz objektiem.
  • Nulles vērtību kā argumentu nodošana iekšējām funkcijām, kas atzīmētas kā nenolīgumas, ir novecojušas. PHP 8.1, izmantojot tādas konstrukcijas kā str_contains("string", null), tiks parādīts brīdinājums, bet PHP 9 - kļūda.
  • Pievienots atbalsts MurmurHash3 un xxHash jaukšanas algoritmiem.

Avots: opennet.ru

Iegādājieties uzticamu mitināšanu vietnēm ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa vietņu mitināšanu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster