Liberazione di lingua di prugrammazione PHP 8.1

Dopu un annu di sviluppu, a liberazione di a lingua di prugrammazione PHP 8.1 hè stata presentata. U novu ramu include una seria di funzioni novi, è ancu parechji cambiamenti chì rompenu a cumpatibilità.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π² PHP 8.1:

  • Aghjunghje supportu per l'enumerazioni, per esempiu, pudete avΓ  aduprΓ  e seguenti custruzzioni: enum Status { case Pending ; casu Active; casu Archivatu; } class Post { public function __construct (private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° лСгковСсных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ±Π΅Ρ€Π°ΠΌΠΈ (Fiber) ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ выполнСния Π½Π° Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ„Π°ΠΉΠ±Π΅Ρ€ΠΎΠ² планируСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ Amphp ΠΈ ReactPHP. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend(β€˜after suspending’); // … }); $valueAfterSuspending = $fiber->start(); $fiber->resume(β€˜after resuming’);
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° рСализация кэша ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (opcache), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ наслСдовании классов. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° 5-8%. Из Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ отмСчаСтся оптимизация Ρ€Π°Π±ΠΎΡ‚Ρ‹ JIT, рСализация ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ JIT для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ARM64 (AArch64), ускорСниС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠΌΡ‘Π½, оптимизация Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ timelib ΠΈ ext/date, ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ сСриализации ΠΈ дСсСриализации, оптимизация функция get_declared_classes(), explode(), strtr(), strnatcmp(), dechex(). Π’ ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ отмСчаСтся ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Symfony Demo Π½Π° 23.0%, Π° WordPress Π½Π° 3.5%.
  • L'operatore di unpacking in arrays "...$var", chΓ¬ permette a sustituzione di arrays esistenti quandu definisce un novu array, hΓ¨ statu allargatu per supportΓ  e chjave di stringa (prima solu l'identificatori digitali eranu supportati). Per esempiu, pudete avΓ  aduprΓ  in codice: $array1 = ["a" => 1]; $array2 = ["b" => 2]; $array = [β€œa” => 0, …$array1, …$array2]; var_dump($array); // ["a" => 1, "b" => 2]
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Β«newΒ» Π² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² опрСдСлСниях Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠ»ΠΈ Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Ρ‚ΠΎΠ². class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΈ свойств класса для доступа Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния (информация Π² ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ свойства ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записана Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, послС Ρ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ доступна для измСнСния). class PostData { public function __construct( public readonly string $title, public readonly DateTimeImmutable $date, ) {} } $post = new Post(β€˜Title’, /* … */); $post->title = β€˜Other’; > Error: Cannot modify readonly property Post::$title
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½ΠΎΠ²Ρ‹ΠΉ синтаксис для Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (callable) β€” Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π²Ρ‹Π·Π²Π°Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅ΠΉ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «…» (Ρ‚.Π΅. myFunc(…) вмСсто Closure::fromCallable(β€˜myFunc’)): function foo(int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° полноцСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ‚ΠΈΠΏΠΎΠ² (intersection types), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, комбинируя ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ union-Ρ‚ΠΈΠΏΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΈΠΏΠΎΠ², intersection-Ρ‚ΠΈΠΏΡ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ наличия Π² заполняСмом мноТСствС Π½Π΅ любого ΠΈΠ· пСрСчислСнных Ρ‚ΠΈΠΏΠΎΠ², Π° всСх ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Ci hΓ¨ un novu tipu "mai" chΓ¬ pΓ² esse usatu per informΓ  l'analizzatori statichi chΓ¬ una funzione finisce l'esekzione di u prugramma, per esempiu, scacciendu una eccezzioni o eseguendu a funzione di uscita. funzione dd(mixed $input): mai { exit; }
  • Una nova funzione array_is_list hΓ¨ stata pruposta, chΓ¬ permette di determinΓ  chΓ¬ i chjavi in ​​l'array sΓ² disposti in ordine di valori numerichi crescente, partendu da 0: $list = ["a", "b", "c"]; array_is_list($lista); // true $notAList = [1 => "a", 2 => "b", 3 => "c"]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // falsu
  • Для Π·Π°ΠΏΡ€Π΅Ρ‚Π° пСрСопрСдСлСния констант Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Β«finalΒ». 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 }
  • E funzioni fsync Γ¨ fdatasync sΓ² pruposte per furzΓ  i cambiamenti per esse salvati da a cache di discu. $file = fopen ("sample.txt", "w"); fwrite($file, "QualchΓ¬ cuntenutu"); if (fsync($file)) { echo "U schedariu hΓ¨ statu persistatu cΓΉ successu Γ  u discu."; } fclose($file);
  • Aghjunghje a capacitΓ  di utilizΓ  i prefissi "0o" Γ¨ "0O" per i numeri ottali, in piΓΉ di u prefissu "0" utilizatu prima. 016 === 0o16; // veru 016 === 0O16; // veru
  • HΓ¨ prupostu di limitΓ  selettivamente l'usu di $GLOBALS, chΓ¬ portarΓ  Γ  una violazione di cumpatibilitΓ  retrocede, ma permetterΓ  di accelerΓ  significativamente l'operazioni cΓΉ arrays. Per esempiu, a pussibilitΓ  di disattivΓ  a scrittura Γ  $ GLOBALS Γ¨ di passΓ  $ GLOBALS per puntatore hΓ¨ stata cunsiderata. Un analisi di 2000 pacchetti hΓ  dimustratu chΓ¬ solu 23 di elli seranu affettati da stu cambiamentu. Per esempiu, se a pruposta hΓ¨ appruvata, 8.1 ΓΉn sustene piΓΉ espressioni cum'Γ¨: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $ GLOBALI; unset($GLOBALS); by_ref($GLOBALS);
  • Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π’ PHP 8.1 ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ°, Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ объявлСнию Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π½ΠΎ Π² PHP 9.0 ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ.
  • U travagliu cuntinuΓ² nantu Γ  u trasferimentu di funzioni da l'usu di risorse Γ  a manipulazione di l'uggetti. E funzioni finfo_* Γ¨ imap_* sΓ² state trasferite Γ  l'uggetti.
  • PassΓ  i valori nulli cum'Γ¨ argumenti Γ  e funzioni interne marcate micca nullable hΓ¨ statu deprecatu. In PHP 8.1, l'usu di custruzzioni cum'Γ¨ str_contains ("string", null) porta Γ  un avvisu, Γ¨ in PHP 9 Γ  un errore.
  • Aghjunghje supportu per l'algoritmi di hashing MurmurHash3 Γ¨ xxHash.

Source: opennet.ru

Add a comment