PHP 8.2 programavimo kalbos išleidimas

Po metų kūrimo buvo pristatyta PHP 8.2 programavimo kalba. Naujoje šakoje yra daugybė naujų funkcijų, taip pat keletas pakeitimų, kurie pažeidžia suderinamumą.

Pagrindiniai PHP 8.2 patobulinimai:

  • Pridėta galimybė pažymėti klasę kaip tik skaitomą. Tokių klasių ypatybes galima nustatyti tik vieną kartą, po to jų keisti nebebus galima. Anksčiau atskiros klasės ypatybės galėjo būti pažymėtos kaip tik skaitomos, tačiau dabar šį režimą galite įjungti visoms klasės ypatybėms vienu metu. Nurodant žymą „tik skaityti“ klasės lygiu, taip pat blokuojamas dinaminis ypatybių įtraukimas į klasę. readonly class Post { public function __construct( public string $pavadinimas, viešas Autorius $autorius, ) {} } $post = new Post(/* … */); $post->unknown = 'neteisinga'; // Klaida: Nepavyko sukurti dinaminės nuosavybės Post::$unknown
  • Pridėta atskirų tipų „true“, „false“ ir „null“, kurie gali turėti tik vieną galiojančią reikšmę ir naudojami, pavyzdžiui, norint grąžinti funkciją su klaidos pabaigos vėliava arba tuščia reikšme. Anksčiau „true“, „false“ ir „null“ galėjo būti naudojami tik kartu su kitais tipais (pvz., „string|false“), tačiau dabar juos galima naudoti atskirai: function alwaysFalse(): false { return false ; }
  • Suteikta galimybė filtruoti jautrius nustatymus kamino sekimo išvestyje klaidos metu. Kai informacija apie įvykusias klaidas automatiškai siunčiama trečiųjų šalių paslaugoms, kurios seka problemas ir informuoja apie jas kūrėjus, gali prireikti iškirpti tam tikrą informaciją. Pavyzdžiui, iš sekimo galite išskirti parametrus, kurie apima naudotojų vardus, slaptažodžius ir aplinkos kintamuosius. function test( $foo, #[\SensitiveParameter] $slaptažodis, $baz ) { throw new Exception('Klaida'); } test('foo', 'slaptažodis', 'baz'); Lemtinga klaida: nepagauta Išimtis: klaida test.php: 8 dėklo sekimas: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} įmestas į test.php internete 8
  • Leidžiama apibrėžti savybių konstantas (požymis, kodo pakartotinio panaudojimo mechanizmas). Požymyje apibrėžtas konstantas galima pasiekti per klasę, kuri naudoja požymį (bet ne per bruožo pavadinimą). bruožas Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatal error } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Pridėta galimybė nurodyti tipus disjunkcinėje normalioje formoje (DNF, Disjunctive Normal Form), kuri leidžia derinti tipų sąjungą (dviejų ar daugiau tipų rinkinius) ir tipų sankirtą (tipus, kurių reikšmės patenka į keletą tipai vienu metu). class Foo { public function bar((A&B)|null $subjektas) { if ($entity === null) { return null; } return $entity; } }
  • Buvo pasiūlytas naujas plėtinys „Random“ su funkcijomis ir klasėmis, skirtas generuoti pseudoatsitiktinius skaičius ir sekas. Modulis suteikia objektinę sąsają, leidžia pasirinkti skirtingus pseudoatsitiktinių skaičių generavimo variklius, įskaitant tinkamus naudoti kriptografijoje, ir teikia pagalbines funkcijas, pavyzdžiui, atsitiktinai maišyti masyvus ir eilutes, pasirinkti atsitiktinius masyvo raktus, tuo pačiu metu kelių generatorių naudojimas su savo nepriklausoma būsena. $rng = $ is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = naujas Atsitiktinis\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Įdiegtas nuo lokalės nepriklausomas didžiųjų raidžių konvertavimas. Tokios funkcijos kaip strtolower() ir strtoupper() dabar visada konvertuoja ASCII diapazono simbolių didžiąsias ir mažąsias raides, kaip ir nustatant lokalę į "C".
  • Pridėtos naujos funkcijos: 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.
  • Pridėta naujų metodų: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Galimybė dinamiškai kurti klasės ypatybes nebenaudojama. PHP 9.0 prieiga prie ypatybių, kurios iš pradžių neapibrėžtos klasėje, sukels klaidą (ErrorException). Klasės, teikiančios __get ir __set metodus nuosavybėms kurti, arba dinamines ypatybes stdClass ir toliau veiks be pakeitimų, bus palaikomas tik numanomas darbas su neegzistuojančiomis savybėmis, siekiant apsaugoti kūrėją nuo paslėptų klaidų. Norint išsaugoti senojo kodo veikimą, siūlomas atributas „#[AllowDynamicProperties]“, leidžiantis naudoti dinamines savybes.
  • Galimybė pakeisti kintamųjų reikšmes į eilutes naudojant „${var}“ ir ${(var)}“ išraiškas nebenaudojama. Išsaugotas dažniausiai naudojamų „{$var}“ ir „$var“ pakaitalų palaikymas. Pavyzdžiui: "Sveiki, {$world}"; Gerai „Sveikas, $pasaulis“; Gerai „Sveiki, ${world}“; Nebenaudojama: ${} naudojimas eilutėse yra nebenaudojamas
  • Iš dalies palaikomi iškvietimai, kuriuos galima iškviesti naudojant "call_user_func($callable)", buvo nebenaudojami, bet nepalaiko skambinimo forma "$callable()": "self::method" "parent::method" "static :: metodas" ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [naujas Foo, "Bar: :method" "]
  • Prie nustatymų pridėta direktyva error_log_mode, leidžianti nustatyti prieigos prie klaidų žurnalo režimą.

Šaltinis: opennet.ru

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