PHP 8.2 programmēšanas valodas izlaidums

Pēc gada izstrādes tika prezentēta PHP 8.2 programmēšanas valodas izlaidums. Jaunajā filiālē ir iekļauta virkne jaunu funkciju, kā arī vairākas izmaiņas, kas traucē saderību.

Galvenie PHP 8.2 uzlabojumi:

  • Pievienota iespēja atzīmēt klasi kā tikai lasāmu. Rekvizītus šādās klasēs var iestatīt tikai vienu reizi, pēc tam tos nevar mainīt. Iepriekš atsevišķus klases rekvizītus varēja atzīmēt kā tikai lasāmus, taču tagad šo režīmu varat iespējot visiem klases rekvizītiem vienlaikus. Norādot karodziņu "tikai lasāms" klases līmenī, tiek bloķēta rekvizītu dinamiska pievienošana klasei. readonly class Post { public function __construct( public string $nosaukums, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'nepareizi'; // Kļūda: nevar izveidot dinamisku rekvizītu Post::$unknown
  • Pievienoti atsevišķi veidi “true”, “false” un “null”, kuriem var būt tikai viena derīga vērtība un tiek izmantoti, piemēram, lai atgrieztu funkciju ar kļūdas beigu karogu vai tukšu vērtību. Iepriekš “true”, “false” un “null” varēja lietot tikai kopā ar citiem veidiem (piemēram, “string|false”), taču tagad tos var lietot atsevišķi: function alwaysFalse(): false { return false ; }
  • Nodrošina iespēju kļūdas laikā filtrēt sensitīvus parametrus steka izsekošanas izvadē. Noteiktas informācijas izgriešana var būt nepieciešama, ja informācija par kļūdām tiek automātiski nosūtīta trešo pušu pakalpojumiem, kas izseko problēmas un informē par tām izstrādātājus. Piemēram, varat izslēgt no izsekošanas parametrus, kas ietver lietotājvārdus, paroles un vides mainīgos. funkciju tests( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'parole', 'baz'); Fatāla kļūda: nenoķerts Izņēmums: kļūda test.php: 8. Steka izsekošana: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} iemests test.php 8. rindā
  • Atļauts definēt konstantes pazīmēs (iezīme, koda atkārtotas izmantošanas mehānisms). Iezīmē definētajām konstantēm var piekļūt, izmantojot klasi, kas izmanto pazīmi (bet ne caur pazīmes nosaukumu). iezīme Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatal error } } class Bar { use Foo; } var_dump(josla::CONSTANT); // 1
  • Pievienota iespēja norādīt tipus disjunktīvā normālā formā (DNF, Disjunctive Normal Form), kas ļauj apvienot tipu savienību (divu vai vairāku veidu kolekcijas) un tipu krustojumu (tipi, kuru vērtības ietilpst vairākos veidi vienlaicīgi). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } return $entity; } }
  • Ir ierosināts jauns paplašinājums “Random” ar funkcijām un klasēm pseidogadījuma skaitļu un secību ģenerēšanai. Modulis nodrošina objektorientētu interfeisu, ļauj izvēlēties dažādus pseidogadījuma skaitļu ģenerēšanas dzinējus, tostarp tos, kas piemēroti izmantošanai kriptogrāfijā, un nodrošina palīgfunkcijas, piemēram, masīvu un virkņu nejaušai sajaukšanai, nejaušu masīvu atslēgu atlasei, vairāku ģeneratoru vienlaicīga izmantošana ar savu neatkarīgo stāvokli. $rng = $is_production ? jauns Random\Engine\Secure() : jauns Random\Engine\Mt19937(1234); $randomizer = jauns Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Ieviesta no lokalizācijas neatkarīga reģistra konvertēšana. Tādas funkcijas kā strtolower() un strtoupper() tagad vienmēr pārveido rakstzīmju reģistru ASCII diapazonā tā, it kā tās būtu iestatītas uz "C" lokalizāciju.
  • Pievienotas jaunas funkcijas: 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.
  • Pievienotas jaunas metodes: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Iespēja dinamiski izveidot rekvizītus klasē ir novecojusi. PHP 9.0, piekļūstot rekvizītiem, kas klasē sākotnēji nav definēti, radīs kļūdu (ErrorException). Klases, kas nodrošina __get un __set metodes rekvizītu izveidei vai dinamiskos rekvizītus programmā stdClass, turpinās darboties bez izmaiņām, tiks atbalstīts tikai netiešs darbs ar neesošiem rekvizītiem, lai aizsargātu izstrādātāju no slēptām kļūdām. Lai saglabātu vecā koda darbību, tiek piedāvāts atribūts “#[AllowDynamicProperties]”, kas ļauj izmantot dinamiskos rekvizītus.
  • Iespēja aizstāt mainīgo vērtības virknēs, izmantojot izteicienus "${var}" un ${(var)}, ir novecojusi. Atbalsts bieži lietotajiem "{$var}" un "$var" aizstājumiem ir saglabāts. Piemēram: "Sveiki, {$world}"; OK "Sveika $world"; Labi "Sveiki, ${world}"; Novecojis: ${} izmantošana virknēs ir novecojusi
  • Novecojuši daļēji atbalstītie izsaucamie vienumi, kurus var izsaukt, izmantojot "call_user_func($callable)", bet neatbalsta izsaukšanu formā "$callable()": "self::method" "parent::method" "static" ::method " ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [jauns Foo, "Bar: :method" ]
  • Iestatījumiem ir pievienota direktīva error_log_mode, kas ļauj noteikt piekļuves režīmu kļūdu žurnālam.

Avots: opennet.ru

Pievieno komentāru