PHP 8.1 бағдарламалау тілінің шығарылымы

Бір жылдық дамудан кейін PHP 8.1 бағдарламалау тілінің шығарылымы ұсынылды. Жаңа филиал бірқатар жаңа мүмкіндіктерді, сондай-ақ үйлесімділікті бұзатын бірнеше өзгерістерді қамтиды.

PHP 8.1-дегі негізгі жақсартулар:

  • Тізімдер үшін қосылған қолдау, мысалы, енді келесі құрылымдарды пайдалануға болады: enum Status { case Pending; case Active; іс мұрағатталған; } class Post { жалпыға ортақ функция __конструкция (жеке Күй $күй = Күй::Күтуде; ) {} жалпы функция setStatus(Күй $күй): void { // … } } $post->setStatus(Күй:: Белсенді);
  • Төмен деңгейде орындау ағындарын басқаруға мүмкіндік беретін Fibers деп аталатын жеңіл ағындарға қолдау қосылды. Талшықты қолдауды Amphp және ReactPHP фреймворктеріне қосу жоспарлануда. $талшық = жаңа талшық (функция (): void { $valueAfterResuming = Fiber::suspend('тоқтатқаннан кейін'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->resume('жалғастырудан кейін');
  • Нысан кодының кэшінің (opcache) жүзеге асырылуы жетілдірілді, бұл класс мұрасы туралы ақпаратты кэштеуге мүмкіндік береді. Оңтайландыру кейбір қолданбалардың өнімділігін 5-8%-ға арттыруға мүмкіндік берді. Басқа оңтайландыруларға JIT жұмысын оңтайландыру, ARM64 архитектурасына JIT қолдауын енгізу (AArch64), атау рұқсатын жеделдету, timelib және ext/date кітапханаларын оңтайландыру, сериализация мен сериядан шығару өнімділігін арттыру, get_declared_classes(), explode() оңтайландыру кіреді. , strtr() функциясы, strrnatcmp(), dechex(). Жалпы, Symfony Demo үшін өнімділік 23.0%, WordPress үшін 3.5% артты.
  • Жаңа массивті анықтау кезінде бар массивтерді ауыстыруға мүмкіндік беретін «...$var» массивтерінің ішіндегі орауыштан шығару операторы жол пернелерін қолдау үшін кеңейтілді (бұрын тек сандық идентификаторларға қолдау көрсетілген). Мысалы, енді кодта қолдануға болады: $array1 = [“a” => 1]; $массив2 = ["b" => 2]; $массив = [“a” => 0, …$массив1, …$массив2]; var_dump($массив); // ["a" => 1, "b" => 2]
  • «жаңа» кілт сөзін инициализаторларда, мысалы, әдепкі параметр ретінде функция анықтамаларында немесе аргумент атрибуттарында пайдалануға рұқсат етіледі. class MyController { жалпыға ортақ функция __конструкция(жеке Logger $logger = жаңа NullLogger(), ) {} }
  • Тек оқу үшін қол жеткізу үшін сынып сипаттарын белгілеуге болады (мұндай сипаттардағы ақпаратты тек бір рет жазуға болады, содан кейін өзгертуге қол жетімді болмайды). class PostData { жалпыға ортақ функция __конструкция(жалпыға оқуға арналған жол $title, жалпыға қолжетімді DateTimeImmutable $date, ) {} } $post = new Post('Тақырып', /* … */); $post->title = 'Басқа'; > Қате: тек оқу сипатын өзгерту мүмкін емес Post::$title
  • Шақырылатын нысандар үшін жаңа синтаксис енгізілді - енді функцияны шақыру және оған аргумент ретінде "..." мәнін беру (яғни, Closure::fromCallable('myFunc) орнына myFunc(...)) арқылы жабуды жасауға болады. ')): foo функциясы (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Барын біріктіру арқылы жаңа түрлерді жасауға мүмкіндік беретін қиылысу түрлеріне толық қолдау қосылды. Екі немесе одан да көп түрлердің жинақтарын анықтайтын біріктіру түрлерінен айырмашылығы, қиылысу түрлері толтырылатын жиынтықта аталған түрлердің ешқайсысының емес, барлық көрсетілген түрлердің болуын талап етеді. function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Функцияның бағдарламаның орындалуын тоқтататындығы туралы статикалық анализаторларға хабарлау үшін пайдалануға болатын «ешқашан» жаңа түрі бар, мысалы, ерекше жағдайды шығару немесе шығу функциясын орындау. функциясы dd(аралас $input): ешқашан { шығу; }
  • Жаңа array_is_list функциясы ұсынылды, ол массивтегі пернелердің 0-ден бастап сандық мәндердің өсу ретімен орналасатынын анықтауға мүмкіндік береді: $list = [“a”, “b”, “c”]; массив_тізімі($тізім); // true $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // жалған
  • Енді ата-аналық сынып тұрақтыларының қайта анықталуын болдырмау үшін "соңғы" кілт сөзін пайдалануға болады. class Foo { final public const X = "foo"; } сынып Bar кеңейтеді Foo { public const X = "bar"; > Қате қате: Bar::X соңғы Foo::X тұрақтысын қайта анықтай алмайды }
  • fsync және fdatasync функциялары өзгерістерді диск кэшінен сақтауға мәжбүрлеу үшін ұсынылады. $файл = fopen("sample.txt", "w"); fwrite($файл, «Кейбір мазмұн»); if (fsync($file)) { echo "Файл дискіде сәтті сақталды."; } fclose($файл);
  • Бұрын қолданылған «0» префиксіне қосымша сегіздік сандар үшін «0o» және «0O» префикстерін қолдану мүмкіндігі қосылды. 016 === 0o16; // шын 016 === 0O16; // шын
  • $GLOBALS пайдалануды таңдаулы түрде шектеу ұсынылады, бұл кері үйлесімділіктің бұзылуына әкеледі, бірақ массивтермен операцияларды айтарлықтай жылдамдатуға мүмкіндік береді. Мысалы, $GLOBALS жүйесіне жазуды өшіру және $GLOBALS көрсеткішін көрсеткіш арқылы беру мүмкіндігі қарастырылуда. 2000 пакетті талдау олардың тек 23-іне бұл өзгеріс әсер ететінін көрсетті. Мысалы, ұсыныс мақұлданса, 8.1 бұдан былай өрнектерді қолдамайды, мысалы: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; орнатылмаған($GLOBALS); by_ref($GLOBALS);
  • Ішкі әдістер енді дұрыс түрді қайтаруы керек. PHP 8.1-де функция декларациясына сәйкес келмейтін түрді қайтару ескертуді тудырады, бірақ PHP 9.0-де ескерту қатемен ауыстырылады.
  • Функцияларды ресурстарды пайдаланудан объектілерді басқаруға ауыстыру бойынша жұмыс жалғасты. finfo_* және imap_* функциялары нысандарға тасымалданды.
  • Нөлдік мәндерді нөлдік емес деп белгіленген ішкі функцияларға аргумент ретінде беру ескірген. PHP 8.1-де str_contains («жол», null) сияқты құрылымдарды пайдалану ескертуге, ал PHP 9-да қатеге әкеледі.
  • MurmurHash3 және xxHash хэштеу алгоритмдеріне қолдау қосылды.

Ақпарат көзі: opennet.ru

пікір қалдыру