PHP 8.2 dasturlash tilining chiqarilishi

Bir yillik rivojlanishdan so'ng, PHP 8.2 dasturlash tilining chiqarilishi taqdim etildi. Yangi filial bir qator yangi xususiyatlarni, shuningdek, muvofiqlikni buzadigan bir nechta o'zgarishlarni o'z ichiga oladi.

PHP 8.2 da asosiy yaxshilanishlar:

  • Sinfni faqat o‘qish uchun belgilash imkoniyati qo‘shildi. Bunday sinflardagi xususiyatlar faqat bir marta o'rnatilishi mumkin, keyin ularni o'zgartirib bo'lmaydi. Ilgari alohida sinf xususiyatlari faqat o'qish uchun belgilanishi mumkin edi, ammo endi siz ushbu rejimni barcha sinf xususiyatlari uchun bir vaqtning o'zida yoqishingiz mumkin. Sinf darajasida "faqat o'qish" bayrog'ini belgilash xususiyatlarni sinfga dinamik ravishda qo'shishni ham bloklaydi. faqat o‘qish uchun sinf Post { umumiy funktsiya __construct( umumiy string $title, umumiy Muallif $author, ) {} } $post = new Post(/* … */); $post->noma'lum = 'noto'g'ri'; // Xato: Dinamik xususiyat yaratib bo'lmadi Post::$noma'lum
  • Faqat bitta haqiqiy qiymatni qabul qilishi mumkin bo'lgan va, masalan, xatoni tugatish bayrog'i yoki bo'sh qiymatli funktsiyani qaytarish uchun ishlatiladigan "haqiqiy", "noto'g'ri" va "null" alohida turlari qo'shildi. Ilgari “true”, “false” va “null” faqat boshqa turlar bilan birgalikda ishlatilishi mumkin edi (masalan, “string|false”), ammo endi ular alohida ishlatilishi mumkin: function alwaysFalse(): false { return false ; }
  • Xato vaqtida stek izi chiqishidagi sezgir parametrlarni filtrlash imkoniyatini beradi. Agar yuzaga kelgan xatolar haqida ma'lumot avtomatik ravishda muammolarni kuzatadigan va ular haqida ishlab chiquvchilarga xabar beradigan uchinchi tomon xizmatlariga yuborilganda, ba'zi ma'lumotlarni kesib tashlash kerak bo'lishi mumkin. Masalan, foydalanuvchi nomlari, parollar va atrof-muhit o'zgaruvchilarini o'z ichiga olgan parametrlarni kuzatishdan chiqarib tashlashingiz mumkin. funktsiya testi( $foo, #[\SensitiveParameter] $parol, $baz ) { throw new Exception('Xato'); } test('foo', 'parol', 'baz'); Fatal xato: Tutib olinmagan istisno: test.php da xato: 8 Stack trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} test.php da tashlangan 8-qatorda
  • Belgilardagi konstantalarni aniqlashga ruxsat berilgan (xususiyat, kodni qayta ishlatish mexanizmi). Belgida aniqlangan doimiylarga belgidan foydalanadigan sinf orqali kirish mumkin (lekin belgi nomi orqali emas). trait Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatal xato } } class Bar {foodan foydalaning; } var_dump(Bar::CONSTANT); // 1
  • Turlarning birlashuvini (ikki yoki undan ortiq turdagi to'plamlar) va turlarning kesishishini (qiymatlari bir nechta turlarga to'g'ri keladigan turlarni) birlashtirishga imkon beruvchi disjunktiv normal shaklda (DNF, Disjunctive Normal Form) turlarni belgilash imkoniyati qo'shildi. turlari bir vaqtning o'zida). class Foo { umumiy funktsiya satri((A&B)|null $entity) { if ($entity === null) { return null; } qaytish $entity; } }
  • Pseudo-tasodifiy raqamlar va ketma-ketliklarni yaratish uchun funktsiyalar va sinflarga ega yangi "Tasodifiy" kengaytmasi taklif qilindi. Modul ob'ektga yo'naltirilgan interfeysni ta'minlaydi, soxta tasodifiy raqamlarni yaratish uchun turli xil dvigatellarni tanlashga imkon beradi, shu jumladan kriptografiyada foydalanish uchun mos keladi va yordamchi funktsiyalarni ta'minlaydi, masalan, massivlar va satrlarni tasodifiy aralashtirish, tasodifiy massiv tugmachalarini tanlash, o'zingizning mustaqil davlatingiz bilan bir vaqtning o'zida bir nechta generatorlardan foydalanish. $rng = $is_production? new Random\Engine\Secure() : yangi Random\Engine\Mt19937(1234); $randomizer = yangi Tasodifiy\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Mahalliy tildan mustaqil registr konvertatsiyasi amalga oshirildi. strtolower() va strtoupper() kabi funksiyalar endi har doim ASCII diapazonidagi belgilar registrini xuddi “C” tiliga o‘rnatilgandek aylantiradi.
  • Yangi funksiyalar qo‘shildi: 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.
  • Yangi usullar qo'shildi: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Sinfda xususiyatlarni dinamik ravishda yaratish qobiliyati eskirgan. PHP 9.0 da sinfda dastlab aniqlanmagan xususiyatlarga kirish xatolikka olib keladi (ErrorException). Xususiyatlarni yaratish uchun __get va __set usullarini yoki stdClass'dagi dinamik xususiyatlarni ta'minlovchi sinflar o'zgarishsiz ishlashda davom etadi, ishlab chiquvchini yashirin xatolardan himoya qilish uchun faqat mavjud bo'lmagan xususiyatlar bilan yashirin ish qo'llab-quvvatlanadi. Eski kodning ishini saqlab qolish uchun dinamik xususiyatlardan foydalanishga imkon beruvchi “#[AllowDynamicProperties]” atributi taklif etiladi.
  • "${var}" va ${(var)} iboralari yordamida oʻzgaruvchan qiymatlarni satrlarga almashtirish imkoniyati eskirgan. Ko'p ishlatiladigan "{$var}" va "$var" almashtirishlar qo'llab-quvvatlandi. Masalan: "Salom {$world}"; OK "Salom $world"; OK "Salom ${world}"; Eskirgan: satrlarda ${} dan foydalanish eskirgan
  • "call_user_func($callable)" orqali chaqirilishi mumkin bo'lgan, lekin "$callable()": "self::method" "parent::method" "statik" ::method shaklida qo'ng'iroq qilishni qo'llab-quvvatlamaydigan qisman qo'llab-quvvatlanadigan eskirgan qo'ng'iroqlar. " ["self", "metod"] ["ota-ona", "metod"] ["statik", "metod"] ["Foo", "Bar::method"] [yangi Foo, "Bar: :method" ]
  • Xatolar jurnaliga kirish rejimini aniqlash imkonini beruvchi error_log_mode direktivasi sozlamalarga qo'shildi.

Manba: opennet.ru

a Izoh qo'shish