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 PHP 8.1 uzlabojumi:

  • 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 vieglajiem pavedieniem, ko sauc par Fibers, kas ļauj pārvaldīt izpildes pavedienus zemā līmenī. Fiber atbalstu plānots pievienot Amphp un ReactPHP ietvariem. $fiber = new Fiber(funkcija (): void { $valueAfterResuming = Fiber::suspend('pēc apturēšanas'); // ... }); $vērtībaAfterSuspending = $fiber->start(); $fiber->resume('pēc atsākšanas');
  • Ir uzlabota objekta koda kešatmiņas (opcache) ieviešana, ļaujot saglabāt informāciju par klases pārmantošanu. Optimizācija ļāva palielināt dažu lietojumprogrammu veiktspēju par 5-8%. Citas optimizācijas ietver JIT darbības optimizāciju, JIT atbalsta ieviešanu ARM64 arhitektūrai (AArch64), nosaukumu izšķirtspējas paātrināšanu, timelib un ext/date bibliotēku optimizāciju, palielinātu serializācijas un deserializācijas veiktspēju, get_declared_classes(), explode() optimizāciju. , funkcija strtr(), strnatcmp(), dechex(). Kopumā Symfony Demo veiktspēja ir palielinājusies par 23.0%, bet WordPress – par 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ārdu "jauns" ir atļauts izmantot inicializatoros, piemēram, funkciju definīcijās kā noklusējuma parametru vai argumentu atribūtos. class MyController {publiskā funkcija __construct(privāts reģistrētājs $logger = new NullLogger(), ) {}}
  • Ir iespējams atzīmēt klases rekvizītus tikai lasīšanas piekļuvei (šādos rekvizītos informāciju var ierakstīt tikai vienu reizi, pēc tam tā nebūs pieejama mainīšanai). class PostData { public function __construct(publiski lasāma virkne $nosaukums, publiska tikai lasāma DateTimeImmutable $date, ) {} } $post = new Post('Nosaukums', /* … */); $post->title = 'Cits'; > Kļūda: nevar modificēt tikai lasāmu rekvizītu Post::$title
  • Izsaucamiem objektiem ir ieviesta jauna sintakse - tagad var izveidot slēgšanu, izsaucot funkciju un nododot tai vērtību "..." kā argumentu (t.i. myFunc(...), nevis Closure::fromCallable('myFunc) ')): funkcija foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Pievienots pilnīgs krustojumu veidu atbalsts, ļaujot izveidot jaunus tipus, apvienojot esošos. Atšķirībā no savienības veidiem, kas definē divu vai vairāku veidu kolekcijas, krustojumu tipiem ir nepieciešams, lai aizpildāmajā kopā būtu nevis kāds no uzskaitītajiem veidiem, bet gan visi norādītie veidi. 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 "galīgais", lai novērstu vecāku klases konstantu ignorēšanu. class Foo { gala public const X = "foo"; } class Bar pagarina Foo { public const X = "josla"; > Fatāla kļūda: josla::X nevar ignorēt galīgo konstanti 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);
  • Tagad iekšējām metodēm ir jāatgriež pareizais veids. PHP 8.1, atgriežot tipu, kas neatbilst funkcijas deklarācijai, tiks parādīts brīdinājums, bet PHP 9.0 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

Pievieno komentāru