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

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

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

  • Сыныпты тек оқуға арналған деп белгілеу мүмкіндігі қосылды. Мұндай кластардағы қасиеттерді тек бір рет орнатуға болады, содан кейін оларды өзгерту мүмкін емес. Бұрын жеке сынып сипаттарын тек оқу үшін белгілеуге болады, бірақ енді бұл режимді барлық сынып сипаттарына бірден қосуға болады. Сынып деңгейінде "тек оқуға арналған" жалаушаны көрсету сонымен қатар сипаттарды сыныпқа динамикалық түрде қосуды блоктайды. тек оқуға арналған сынып Жазба { жалпыға ортақ функция __construct(қоғамдық жол $атауы, ашық Автор $автор, ) {} } $post = new Post(/* … */); $post->белгісіз = 'қате'; // Қате: динамикалық сипат жасау мүмкін емес Post::$белгісіз
  • Бір ғана жарамды мән қабылдай алатын және, мысалы, қатені тоқтату жалаушасы немесе бос мән бар функцияны қайтару үшін пайдаланылатын «true», «false» және «null» бөлек түрлері қосылды. Бұрын «true», «false» және «null» тек басқа түрлермен бірге пайдаланылуы мүмкін (мысалы, «string|false»), бірақ енді оларды бөлек пайдалануға болады: function alwaysFalse(): false { return false ; }
  • Қате кезінде стек ізінің шығысындағы сезімтал параметрлерді сүзу мүмкіндігін береді. Орын алған қателер туралы ақпарат ақауларды қадағалайтын және олар туралы әзірлеушілерге хабарлайтын үшінші тарап қызметтеріне автоматты түрде жіберілгенде, белгілі бір ақпаратты өшіру қажет болуы мүмкін. Мысалы, пайдаланушы атын, құпия сөздерді және орта айнымалы мәндерін қамтитын параметрлерді бақылаудан шығаруға болады. функция сынағы( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Қате'); } test('foo', 'password', 'baz'); Күрделі қате: Ұсталмаған ерекше жағдай: test.php қатесі: 8 Стек ізі: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') №1 {main} test.php файлында тасталды 8-жолда
  • Белгілерде тұрақты мәндерді анықтауға рұқсат етілген (сипат, кодты қайта пайдалану механизмі). Белгіде анықталған тұрақтыларға сипатты пайдаланатын сынып арқылы қол жеткізуге болады (бірақ қасиет атауы арқылы емес). trait Foo { public const CONSTANT = 1; public function bar(): int {қайтару self::CONSTANT; // Қате қате } } сынып Bar { Foo пайдаланыңыз; } var_dump(Bar::CONSTANT); // 1
  • Типтердің бірігуін (екі немесе одан да көп түрлердің жинақтары) және түрлердің қиылысуын (мәндері бірнеше түрге жататын түрлерді) біріктіруге мүмкіндік беретін дезьюнктивтік қалыпты формада (DNF, Disjunctive Normal Form) типтерді көрсету мүмкіндігі қосылды. түрлері бір мезгілде). class Foo { жалпы функция жолағы((A&B)|null $entity) { if ($entity === null) {қайтару null; } қайтару $entity; } }
  • Псевдокездейсоқ сандар мен тізбектерді құруға арналған функциялар мен сыныптары бар жаңа «Random» кеңейтімі ұсынылды. Модуль объектіге бағытталған интерфейсті қамтамасыз етеді, псевдокездейсоқ сандарды генерациялау үшін әртүрлі қозғалтқыштарды, соның ішінде криптографияда қолдануға жарамдыларды таңдауға мүмкіндік береді және көмекші функцияларды қамтамасыз етеді, мысалы, массивтер мен жолдарды кездейсоқ араластыру, кездейсоқ массив пернелерін таңдау, өзіңіздің тәуелсіз мемлекетіңізбен бірнеше генераторларды бір уақытта пайдалану. $rng = $is_production? new Random\Engine\Secure() : new 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" ауыстыруларына қолдау сақталды. Мысалы: "Hello {$world}"; Жарайды "Hello $world"; Жарайды "Сәлем ${world}"; Ескірген: ${} жолдарда пайдалану ескірген
  • "call_user_func($callable)" арқылы шақыруға болатын, бірақ "$callable()": "self::method" "parent::method" "static" ::method түрінде қоңырау шалуды қолдамайтын ескірген жартылай қолдау көрсетілетін шақырулар " ["өзіндік", "әдіс"] ["ата-ана", "әдіс"] ["статикалық", "әдіс"] ["Фу", "Бар:: әдіс"] [жаңа Foo, "Бар: :әдіс" ]
  • Қателер журналына кіру режимін анықтауға мүмкіндік беретін error_log_mode директивасы параметрлерге қосылды.

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

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