PHP 8.2 ծրագրավորման լեզվի թողարկում

Մեկ տարվա մշակումից հետո ներկայացվեց PHP 8.2 ծրագրավորման լեզվի թողարկումը։ Նոր մասնաճյուղը ներառում է մի շարք նոր հնարավորություններ, ինչպես նաև մի քանի փոփոխություններ, որոնք խախտում են համատեղելիությունը:

Հիմնական բարելավումներ PHP 8.2-ում.

  • Ավելացվեց դասը որպես միայն կարդալու համար նշելու հնարավորություն: Նման դասերի հատկությունները կարող են սահմանվել միայն մեկ անգամ, որից հետո դրանք չեն կարող փոխվել: Նախկինում դասի անհատական ​​հատկությունները կարող էին նշվել միայն կարդալու համար, բայց այժմ դուք կարող եք միացնել այս ռեժիմը միանգամից բոլոր դասի հատկությունների համար: Դասի մակարդակում «ընթերցվելու համար» դրոշը նշելը նաև արգելափակում է հատկությունների դինամիկ ավելացումը դասին: միայն կարդալու դաս Փոստ { public ֆունկցիա __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'սխալ'; // Սխալ. Հնարավոր չէ ստեղծել դինամիկ հատկություն Գրառում::$անհայտ
  • Ավելացվել են «true», «false» և «null» առանձին տեսակներ, որոնք կարող են ընդունել միայն մեկ վավեր արժեք և օգտագործվում են, օրինակ, սխալի ավարտման դրոշակով կամ դատարկ արժեքով ֆունկցիա վերադարձնելու համար: Նախկինում «true», «false» և «null» կարող էին օգտագործվել միայն այլ տեսակների հետ միասին (օրինակ՝ «string|false»), սակայն այժմ դրանք կարող են օգտագործվել առանձին՝ function alwaysFalse(): false { return false ; }
  • Ապահովում է սխալի ժամանակ զտելու զգայուն պարամետրերը stack trace ելքում: Որոշակի տեղեկատվության անջատումը կարող է անհրաժեշտ լինել, երբ տեղի ունեցող սխալների մասին տեղեկատվությունը ավտոմատ կերպով ուղարկվում է երրորդ կողմի ծառայություններին, որոնք հետևում են խնդիրներին և ծրագրավորողներին տեղեկացնում դրանց մասին: Օրինակ, դուք կարող եք բացառել պարամետրերը, որոնք ներառում են օգտվողի անունները, գաղտնաբառերը և շրջակա միջավայրի փոփոխականները հետագծումից: ֆունկցիայի թեստ( $foo, #[\SensitiveParameter] $password, $baz ) { նետել նոր Բացառություն ('Սխալ'); } test('foo', 'password', 'baz'); Ճակատագրական սխալ. Չբռնված Բացառություն. Սխալ թեստում.php:8 Կույտի հետք՝ #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {հիմնական} նետված է test.php 8-րդ տողում
  • Թույլատրվում է գծերի մեջ հաստատուններ սահմանել (հատկանիշ, կոդի վերօգտագործման մեխանիզմ): Հատկանիշում սահմանված հաստատունները կարող են մուտք գործել այն դասի միջոցով, որն օգտագործում է հատկանիշը (բայց ոչ հատկանիշի անվան միջոցով): հատկանիշ Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Ճակատագրական սխալ } } class Bar { use Foo; } var_dump (Բար::CONSTANT); // 1
  • Ավելացվեց տարանջատող նորմալ ձևով տեսակները նշելու ունակությունը (DNF, Disjunctive Normal Form), որը թույլ է տալիս համատեղել տեսակների միությունը (երկու կամ ավելի տեսակների հավաքածուներ) և տեսակների խաչմերուկը (տեսակներ, որոնց արժեքները ընկնում են մի քանիսի տակ: տեսակները միաժամանակ): class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } վերադարձ $entity; } }
  • Առաջարկվել է նոր ընդլայնում «Պատահական» գործառույթներով և դասերով՝ կեղծ պատահական թվեր և հաջորդականություններ ստեղծելու համար: Մոդուլն ապահովում է օբյեկտի վրա հիմնված ինտերֆեյս, թույլ է տալիս ընտրել տարբեր շարժիչներ՝ կեղծ պատահական թվեր ստեղծելու համար, ներառյալ՝ դրանք, որոնք հարմար են գաղտնագրության մեջ օգտագործելու համար, և ապահովում է օժանդակ գործառույթներ, օրինակ՝ զանգվածների և տողերի պատահական խառնման, զանգվածի պատահական ստեղների ընտրության համար, մի քանի գեներատորների միաժամանակյա օգտագործում սեփական անկախ պետության հետ։ $rng = $is_production ? նոր Պատահական\Շարժիչ\Ապահով()՝ նոր Պատահական\Շարժիչ\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}»; OK «Բարև $world»; OK «Բարև ${world}»; Հնացած. ${}-ի օգտագործումը տողերում հնացած է
  • Հնացած մասնակի աջակցվող կանչելիներ, որոնք կարելի է կանչել «call_user_func($callable)»-ի միջոցով, բայց չեն աջակցում «$callable()»-ի ձևով զանգեր` «self::method» «parent::method» «static» ::method: " ["ես", "մեթոդ"] ["ծնող", "մեթոդ"] ["ստատիկ", "մեթոդ"] ["Foo", "Bar::method"] [new Foo, "Bar: :method" ]
  • Կարգավորումներին ավելացվել է error_log_mode հրահանգը, որը թույլ է տալիս որոշել մուտքի ռեժիմը դեպի սխալների մատյան:

Source: opennet.ru

Добавить комментарий