מעלדונג פון PHP 8.1 פּראָגראַממינג שפּראַך

נאָך אַ יאָר פון אַנטוויקלונג, די מעלדונג פון די PHP 8.1 פּראָגראַממינג שפּראַך איז געווען דערלאנגט. די נייַע צווייַג כולל אַ סעריע פון ​​​​נייַ פֿעיִקייטן, ווי געזונט ווי עטלעכע ענדערונגען וואָס ברעכן קאַמפּאַטאַבילאַטי.

שליסל ימפּרווומאַנץ אין PHP 8.1:

  • צוגעלייגט שטיצן פֿאַר ינומעריישאַנז, פֿאַר בייַשפּיל, איר קענען איצט נוצן די פאלגענדע קאַנסטראַקשאַנז: enum Status {case Pending; פאַל אַקטיוו; פאַל אַרטשיוועד; } קלאַס פּאָסטן {פּובליק פֿונקציע __קאַנסטראַקט (פּריוואַט סטאַטוס $ סטאַטוס = סטאַטוס::פּענדינג;) {} ציבור פֿונקציע סעטסטאַטוס (סטאַטוס $ סטאַטוס): void { // … } } $ פּאָסט->סעטסטאַטוס (סטאַטוס:: אַקטיוו);
  • Добавлена поддержка легковесных потоков, именуемых файберами (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%.
  • דער אַנפּאַקינג אָפּעראַטאָר ין ערייז "...$וואַר", וואָס אַלאַוז סאַבסטיטושאַן פון יגזיסטינג ערייז ווען דיפיינינג אַ נייַ מענגע, איז עקסטענדעד צו שטיצן שטריקל שליסלען (פריער בלויז דיגיטאַל ידענטיפיערס זענען געשטיצט). פֿאַר בייַשפּיל, איר קענען איצט נוצן אין קאָד: $ array1 = ["אַ" => 1]; $array2 = ["ב" => 2]; $ מענגע = ["אַ" => 0, …$ מענגע1, …$ מענגע2]; וואַר_דאַמפּ ($ מענגע); // ["אַ" => 1, "ב" => 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(); }
  • עס איז אַ נייַע טיפּ "קיינמאָל" וואָס קענען זיין געוויינט צו מיטטיילן סטאַטיק אַנאַליזערז אַז אַ פֿונקציע וועט פאַרענדיקן די דורכפירונג פון די פּראָגראַם, למשל דורך וואַרפן אַ ויסנעם אָדער עקסאַקיוטינג די עקסיט פֿונקציע. פֿונקציע דד (געמישט $ ינפּוט): קיינמאָל { אַרויסגאַנג; }
  • א נייַע פֿונקציע array_is_list איז פארגעלייגט, וואָס אַלאַוז איר צו באַשליסן אַז די שליסלען אין די מענגע זענען עריינדזשד אין סדר פון ינקריסינג נומעריקאַל וואַלועס, סטאַרטינג פון 0: $ רשימה = ["אַ", "ב", "C"]; array_is_list ($ רשימה); // אמת $נאָטאַליסט = [1 => "אַ", 2 => "ב", 3 => "C"]; array_is_list ($נאָטאַליסט); // פאַלש $alsoNotAList = ["אַ" => "אַ", "ב" => "ב", "ק" => "C"]; array_is_list ($ אויך נאָטאַליסט); // פאַלש
  • Для запрета переопределения констант родительского класса теперь можно использовать ключевое слово «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 }
  • די fsync און fdatasync פאַנגקשאַנז זענען פארגעלייגט צו צווינגען ענדערונגען צו זיין געראטעוועט פון די דיסק קאַש. $ טעקע = פאָפּען ("סאַמפּלע.טקסט", "וו"); fwrite ($ טעקע, "עטלעכע אינהאַלט"); אויב (פסינק ($ טעקע)) { עקאָו "טעקע איז הצלחה פּערסיסטאַד צו דיסק."; } fclose ($ טעקע);
  • צוגעלייגט די פיייקייט צו נוצן די פּרעפיקס "0אָ" און "0אָ" פֿאַר אָקטאַל נומערן, אין אַדישאַן צו די פריער געוויינט פּרעפיקס "0". 016 === 0אָ16; // אמת 016 === 0אָ16; // אמת
  • עס איז פארגעלייגט צו סאַלעקטיוולי באַגרענעצן די נוצן פון $GLOBALS, וואָס וועט פירן צו אַ הילעל פון צוריק קאַמפּאַטאַבילאַטי, אָבער וועט מאַכן עס מעגלעך צו באטייטיק פאַרגיכערן אַפּעריישאַנז מיט ערייז. פֿאַר בייַשפּיל, די מעגלעכקייט פון דיסייבאַלינג שרייבן צו $GLOBALS און פאָרן $GLOBALS דורך טייַטל איז באַטראַכט. אַן אַנאַליסיס פון 2000 פּאַקאַדזשאַז געוויזן אַז בלויז 23 פון זיי וואָלט זיין אַפעקטאַד דורך דעם ענדערונג. פֿאַר בייַשפּיל, אויב דער פאָרשלאָג איז באוויליקט, 8.1 וועט ניט מער שטיצן אויסדרוקן אַזאַ ווי: $GLOBALS = []; $GLOBALS += []; $גלאָבאַלס =& $קס; $קס =& $גלאָבאַלס; ונסעט ($GLOBALS); by_ref($GLOBALS);
  • Внутренние методы теперь должны возвращать корректный тип. В PHP 8.1 при возвращении типа, не соответствующего объявлению функции, будут выводиться предупреждение, но в PHP 9.0 предупреждение будет заменено на ошибку.
  • אַרבעט פארבליבן אויף טראַנספערינג פאַנגקשאַנז פון ניצן רעסורסן צו מאַניפּיאַלייטינג אַבדזשעקץ. די פינפאָ_* און imap_* פאַנגקשאַנז זענען טראַנספערד צו אַבדזשעקץ.
  • דורכגיין נאַל וואַלועס ווי אַרגומענטן צו ינערלעך פאַנגקשאַנז אנגעצייכנט ניט-נוללאַבלע איז דיפּרישיייטיד. אין PHP 8.1, ניצן קאַנסטראַקשאַנז ווי str_contains ("שטריקל", נאַל) וועט פירן צו אַ ווארענונג, און אין PHP 9 צו אַ טעות.
  • צוגעלייגט שטיצן פֿאַר MurmurHash3 און xxHash כאַשינג אַלגערידאַמז.

מקור: opennet.ru

לייגן אַ באַמערקונג