PHP 8.2 ning alfa testi boshlandi

PHP 8.2 dasturlash tilining yangi filialining birinchi alfa-versiyasi taqdim etildi. Chiqarish 24-noyabrga belgilangan. PHP 8.2 da sinab ko'rish uchun allaqachon mavjud yoki amalga oshirish rejalashtirilgan asosiy innovatsiyalar:

  • Masalan, xatoni tugatish bayrog'ini yoki bo'sh qiymatni qaytarish funksiyasi uchun ishlatilishi mumkin bo'lgan "noto'g'ri" va "null" alohida turlari qo'shildi. Ilgari “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; }
  • 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
  • Sinfda xususiyatlarni dinamik ravishda yaratish qobiliyati (yuqoridagi misoldagi "post->noma'lum" kabi) 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.
  • 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
  • "${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" ]
  • 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.

Manba: opennet.ru

a Izoh qo'shish