Нашри забони барномасозии PHP 8.1

Пас аз як соли таҳия, нашри забони барномасозии PHP 8.1 муаррифӣ шуд. Филиали нав як қатор хусусиятҳои нав ва инчунин якчанд тағиротро дар бар мегирад, ки мутобиқатро вайрон мекунанд.

Такмилҳои асосӣ дар PHP 8.1:

  • Дастгирии иловашуда барои рӯйхатҳо, масалан, шумо ҳоло метавонед сохторҳои зеринро истифода баред: enum Status { case Pending; парванда фаъол; парванда бойгонӣ; } class Post { Функсияи ҷамъиятӣ __созиш( Ҳолати хусусӣ $status = Ҳолати::Интизорӣ; ) {} функсияи ҷамъиятӣ setStatus(Status $status): void { // … } } $post->setStatus(Вазъ::Фаъол);
  • Дастгирии иловашуда барои риштаҳои сабук бо номи Fibers, ки ба шумо имкон медиҳад, ки риштаҳои иҷроро дар сатҳи паст идора кунед. Ба нақша гирифта шудааст, ки дастгирии нахи ба чаҳорчӯбаи Aphp ва ReactPHP илова карда шавад. $нахи = Нахи нав(функсия (): void { $valueAfterResuming = Fiber ::suspend('пас аз боздоштан'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->resume('баъди идома');
  • Татбиқи кэши коди объект (opcache) такмил дода шуд, ки имкон медиҳад, ки маълумот дар бораи мероси синф кэш карда шавад. Оптимизатсия имкон дод, ки кори баъзе замимаҳо 5-8% зиёд карда шавад. Дигар оптимизатсияҳо оптимизатсияи амалиёти JIT, татбиқи дастгирии JIT барои меъмории ARM64 (AArch64), суръат бахшидан ба ҳалли ном, оптимизатсияи китобхонаҳои timelib ва ext/date, афзоиши сериализатсия ва сериализатсия, оптимизатсияи get_declared_classes(), explode() иборатанд. , strtr() функсия, strrnatcmp(), dechex(). Умуман, афзоиши иҷроиш барои Symfony Demo 23.0% ва барои WordPress 3.5% зиёд шудааст.
  • Оператори кушодан дар дохили массивҳои "...$var", ки барои иваз кардани массивҳои мавҷуда ҳангоми муайян кардани массиви нав имкон медиҳад, барои дастгирии калидҳои сатр васеъ карда шудааст (қаблан танҳо идентификаторҳои рақамӣ дастгирӣ мешуд). Масалан, шумо ҳоло метавонед дар код истифода баред: $array1 = [“a” => 1]; $array2 = ["b" => 2]; $массив = [“a” => 0, …$массиви1, …$массиви2]; var_dump($массив); // ["a" => 1, "b" => 2]
  • Иҷозат дода мешавад, ки калимаи калидии "нав" дар инициализаторҳо, масалан дар таърифҳои функсия ҳамчун параметри пешфарз ё атрибутҳои аргумент истифода шавад. class MyController {функсияи ҷамъиятӣ __созиш (хусусии Logger $logger = new NullLogger(), ) {} }
  • Хосиятҳои синфро барои дастрасии танҳо барои хондан қайд кардан мумкин аст (маълумот дар чунин хосиятҳо танҳо як маротиба навишта мешавад, ки баъд аз он барои тағир додан дастрас нест). class PostData { функсияи оммавӣ __construct( сатри танҳо барои хондан $сарлавҳа, танҳо барои хондан оммавӣ DateTimeImmutable $date, ) {} } $post = Post new('Title', /* … */); $post->title = 'Дигар'; > Хатогӣ: Амволи танҳо барои хонданро тағир додан мумкин нест Post::$title
  • Синтаксиси нав барои объектҳои даъватшаванда амалӣ карда шуд - акнун басташавӣ метавонад тавассути даъват кардани функсия ва додани арзиши "..." ба сифати аргумент (яъне myFunc(...) ба ҷои Closure::fromCallable('myFunc) сохта шавад. ')): функсияи foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Дастгирии пурра барои намудҳои чорроҳа илова карда шуд, ки ба шумо имкон медиҳад намудҳои навро тавассути якҷоя кардани намудҳои мавҷуда эҷод кунед. Баръакси навъҳои иттифоқӣ, ки коллексияҳои ду ё зиёда намудҳоро муайян мекунанд, намудҳои чорроҳа мавҷудияти на ягон намуди номбаршуда, балки ҳама намудҳои зикршударо дар маҷмӯи пур кардан талаб мекунанд. функсия generatorSlug(HasTitle&HasId $post) { баргардонидани strtolower($post->getTitle()) . $post->getId(); }
  • Навъи нави "ҳеҷ гоҳ" вуҷуд дорад, ки метавонад барои огоҳ кардани анализаторҳои статикӣ истифода шавад, ки функсия иҷрои барномаро қатъ мекунад, масалан, бо партофтани истисно ё иҷрои функсияи баромад. Функсияи dd(омехта $ворид): ҳеҷ гоҳ { баромадан; }
  • Функсияи нави array_is_list пешниҳод шудааст, ки ба шумо имкон медиҳад муайян кунед, ки калидҳои массив бо тартиби афзоиши қиматҳои ададӣ аз 0 сар карда ҷойгир шудаанд: $list = [“a”, “b”, “c”]; array_is_list($рӯйхат); // ҳақиқӣ $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 {const public final X = "foo"; } class Бар васеъ мекунад 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); by_ref($GLOBALS);
  • Усулҳои дохилӣ акнун бояд навъи дурустро баргардонанд. Дар PHP 8.1, баргардонидани навъе, ки ба эъломияи функсия мувофиқат намекунад, огоҳӣ медиҳад, аммо дар PHP 9.0 огоҳӣ бо хато иваз карда мешавад.
  • Корҳо оид ба интиқол додани функсияҳо аз истифодаи захираҳо ба идоракунии объектҳо идома ёфтанд. Функсияҳои finfo_* ва imap_* ба объектҳо интиқол дода шуданд.
  • Гузаронидани арзишҳои нул ҳамчун аргумент ба функсияҳои дохилие, ки ғайриимкон аст, бекор карда шудааст. Дар PHP 8.1, истифодаи конструксияҳо ба монанди str_contains("string", null) боиси огоҳӣ ва дар PHP 9 ба хатогӣ оварда мерасонад.
  • Дастгирии иловашуда барои алгоритмҳои ҳашингии MurmurHash3 ва xxHash.

Манбаъ: opennet.ru

Илова Эзоҳ