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

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

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

  • Қобилияти қайд кардани синф ҳамчун танҳо барои хондан илова карда шуд. Хусусиятҳоро дар чунин синфҳо танҳо як маротиба муқаррар кардан мумкин аст, ки баъд аз он онҳоро тағир додан мумкин нест. Пештар, хосиятҳои синфҳои алоҳида метавонистанд танҳо барои хондан қайд карда шаванд, аммо акнун шумо метавонед ин режимро барои ҳама хосиятҳои синф якбора фаъол созед. Муайян кардани парчами "танҳо хондан" дар сатҳи синф инчунин хосиятҳоро аз илова кардани динамикӣ ба синф бозмедорад. синфи танҳо барои хондан Post { функсияи оммавӣ __созиш (сатри оммавӣ $сарлавҳа, Муаллифи ҷамъиятӣ $муаллиф, ) {} } $post = Post нав(/* … */); $post->номаълум = 'нодуруст'; // Хатогӣ: Амволи динамикӣ эҷод карда намешавад Post::$номаълум
  • Навъҳои алоҳидаи "true", "false" ва "null" илова карда шуданд, ки метавонанд танҳо як арзиши дурустро гиранд ва масалан, барои баргардонидани функсия бо парчами қатъкунии хато ё арзиши холӣ истифода мешаванд. Пештар, "true", "false" ва "null" танҳо дар якҷоягӣ бо дигар намудҳо истифода мешуданд (масалан, "string|false"), аммо ҳоло онҳо метавонанд алоҳида истифода шаванд: function alwaysFalse(): false { return false ; }
  • Қобилияти филтр кардани параметрҳои ҳассосро дар натиҷаи пайгирии стек ҳангоми хатогӣ таъмин мекунад. Вақте ки маълумот дар бораи хатогиҳо ба таври худкор ба хидматҳои тарафи сеюм фиристода мешавад, ки мушкилотро пайгирӣ мекунанд ва таҳиягаронро дар бораи онҳо огоҳ мекунанд, буридани маълумоти муайян лозим аст. Масалан, шумо метавонед параметрҳоеро, ки номи корбарон, паролҳо ва тағирёбандаҳои муҳити зистро дар бар мегиранд, аз пайгирӣ хориҷ кунед. санҷиши функсия( $foo, #[\SensitiveParameter] $password, $baz ) {world new Exception('Хато'); } тест('foo', 'парол', 'baz'); Хатои марговар: Истиснои дастгирнашуда: Хатогӣ дар test.php:8 пайгирии стек: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') №1 {main} дар test.php партофта шудааст дар хати 8
  • Иҷозат барои муайян кардани константҳо дар аломатҳо (хусусият, механизми истифодаи дубораи код). Ба константаҳои дар хислат муайяншуда тавассути синфе, ки ин хислатро истифода мебарад, дастрас кардан мумкин аст (вале на тавассути номи хислат). trait Foo { public const CONSTANT = 1; Бар функсияи ҷамъиятӣ (): int { баргардонидани self::CONSTANT; // Хатои марговар } } class Bar {foo-ро истифода баред; } var_dump(Бар::CONSTANT); // 1
  • Имконияти муайян кардани намудҳо дар шакли муқаррарии дизюнктивӣ (DNF, Disjunctive Normal Form), илова карда шудааст, ки ба шумо имкон медиҳад иттиҳоди намудҳо (маҷмӯаи ду ё зиёда намудҳо) ва чорроҳаи намудҳоро (намудҳое, ки арзишашон ба якчанд намудҳо рост меояд) муттаҳид кунед. намудҳои ҳамзамон). class Foo { сатри функсияи ҷамъиятӣ((A&B)|null $entity) { if ($entity === null) { return null; } баргардонидани $entity; } }
  • Тавсеаи нави "Random" бо функсияҳо ва синфҳо барои тавлиди рақамҳо ва пайдарпайҳои псевдо-тасодуфӣ пешниҳод шудааст. Модул интерфейси ба объект нигаронидашударо таъмин мекунад, ба шумо имкон медиҳад, ки муҳаррикҳои гуногунро барои тавлиди рақамҳои псевдо-тасодуфӣ, аз ҷумла онҳое, ки барои истифода дар криптография мувофиқанд, интихоб кунед ва вазифаҳои ёрирасонро таъмин мекунад, масалан, барои ба таври тасодуфӣ омехта кардани массивҳо ва сатрҳо, интихоби калидҳои массиви тасодуфӣ, истифодаи ҳамзамон якчанд генераторҳо бо давлати мустақили худ. $rng = $is_production? нав Random \ Engine \ Secure () : нав Random \ Engine \ Mt19937 (1234); $randomizer = нав Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Табдилдиҳии парвандаи мустақил аз забони маҳаллӣ амалӣ карда шуд. Функсияҳо ба монанди strtolower() ва strtoupper() ҳоло ҳамеша ҳолати аломатҳоро дар диапазони ASCII табдил медиҳанд, ки гӯё ба маҳалли "C" гузошта шудааст.
  • Функсияҳои нав илова карда шуданд: mysqli_execute_query, curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Усулҳои нав илова карда шуданд: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Қобилияти ба таври динамикӣ эҷод кардани хосиятҳо дар синф бекор карда шудааст. Дар PHP 9.0, дастрасӣ ба хосиятҳое, ки дар аввал дар синф муайян карда нашудаанд, ба хатогӣ оварда мерасонад (ErrorException). Синфҳое, ки усулҳои __get ва __set-ро барои эҷоди хосиятҳо ё хосиятҳои динамикӣ дар stdClass таъмин мекунанд, бидуни тағирот кор мекунанд, танҳо кори номувофиқ бо хосиятҳои мавҷудбуда дастгирӣ карда мешавад, то таҳиякунанда аз хатогиҳои пинҳоншуда муҳофизат карда шавад. Барои нигоҳ доштани кори коди кӯҳна, атрибути "#[AllowDynamicProperties]" пешниҳод карда мешавад, ки ба истифодаи хосиятҳои динамикӣ имкон медиҳад.
  • Имконияти иваз кардани арзишҳои тағирёбанда ба сатрҳо бо истифода аз ифодаҳои "${var}" ва ${(var)} бекор карда шудааст. Дастгирии ивазкуниҳои маъмулан истифодашавандаи "{$var}" ва "$var" нигоҳ дошта шудааст. Масалан: "Салом {$world}"; Хуб "Салом $world"; Хуб "Салом ${world}"; Қатъ шудааст: Истифодаи ${} дар сатрҳо бекор карда шудааст
  • Зангҳои қисман дастгирӣшаванда, ки онҳоро тавассути "call_user_func($callable)" даъват кардан мумкин аст, аммо зангро дар шакли "$callable()" дастгирӣ намекунад: "self::method" "parent::method" "static" ::method " ["худ", "метод"] ["волид", "метод"] ["статикӣ", "метод"] ["Фу", "Бар::метод"] [нав Фу, "Бар: :метод" ]
  • Дастури error_log_mode ба танзимот илова карда шудааст, ки ба шумо имкон медиҳад, ки ҳолати дастрасӣ ба сабти хатогиҳоро муайян кунед.

Манбаъ: opennet.ru

Илова Эзоҳ