Lëshimi i gjuhës programuese PHP 8.2

Pas një viti zhvillimi, u prezantua lirimi i gjuhës programuese PHP 8.2. Dega e re përfshin një sërë veçorish të reja, si dhe disa ndryshime që prishin përputhshmërinë.

Përmirësimet kryesore në PHP 8.2:

  • U shtua aftësia për të shënuar një klasë si vetëm për lexim. Vetitë në klasa të tilla mund të vendosen vetëm një herë, pas së cilës ato nuk mund të ndryshohen. Më parë, veçoritë individuale të klasës mund të shënoheshin vetëm për lexim, por tani mund ta aktivizoni këtë modalitet për të gjitha vetitë e klasës menjëherë. Specifikimi i flamurit "readonly" në nivelin e klasës gjithashtu bllokon pronat që të shtohen dinamikisht në klasë. klasë vetëm për lexim Post { funksion publik __construct( varg publik $title, publik Autor $autor, ) {} } $post = postim i ri(/* … */); $post->unknown = 'gabim'; // Gabim: Nuk mund të krijohet veti dinamike Postimi::$unknown
  • U shtuan lloje të veçanta "true", "false" dhe "null", të cilat mund të marrin vetëm një vlerë të vlefshme dhe përdoren, për shembull, për të kthyer një funksion me një flamur për përfundimin e gabimit ose një vlerë boshe. Më parë, "true", "false" dhe "null" mund të përdoreshin vetëm në lidhje me lloje të tjera (për shembull, "string|false"), por tani ato mund të përdoren veçmas: funksion gjithmonëFalse(): false { return false ; }
  • Ofron aftësinë për të filtruar parametrat e ndjeshëm në daljen e gjurmës së pirgut gjatë një gabimi. Prerja e informacionit të caktuar mund të jetë e nevojshme kur informacioni për gabimet që ndodhin dërgohet automatikisht te shërbimet e palëve të treta që gjurmojnë problemet dhe informojnë zhvilluesit për to. Për shembull, mund të përjashtoni parametrat që përfshijnë emrat e përdoruesve, fjalëkalimet dhe variablat e mjedisit nga gjurmimi. testi i funksionit( $foo, #[\SensitiveParameter] $password, $baz ) { hedh një Përjashtim të ri ('Gabim'); } test('foo', 'password', 'baz'); Gabim fatal: i pakapur Përjashtim: Gabim në test.php:8 Gjurmë e stivës: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} hedhur në test.php në linjën 8
  • Lejohet të përcaktojë konstante në tipare (tipar, një mekanizëm për ripërdorimin e kodit). Konstantet e përcaktuara në një tipar mund të aksesohen përmes klasës që përdor tiparin (por jo përmes emrit të tiparit). tipar Foo { public const KONSTANT = 1; shiriti i funksionit publik(): int { return self::CONSTANT; // Gabim fatal } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Shtuar aftësinë për të specifikuar llojet në formën normale disjunctive (DNF, Disjunctive Normal Form), e cila ju lejon të kombinoni bashkimin e llojeve (koleksionet e dy ose më shumë llojeve) dhe kryqëzimin e llojeve (llojet vlerat e të cilave bien nën disa llojet në të njëjtën kohë). class Foo { shiriti i funksionit publik((A&B)|null $entitet) { if ($entity === null) { return null; } kthen $entitet; } }
  • Një shtesë e re "Random" është propozuar me funksione dhe klasa për gjenerimin e numrave dhe sekuencave pseudo-rastësore. Moduli ofron një ndërfaqe të orientuar nga objekti, ju lejon të zgjidhni motorë të ndryshëm për gjenerimin e numrave pseudo të rastësishëm, duke përfshirë ato të përshtatshme për përdorim në kriptografi, dhe ofron funksione ndihmëse, për shembull, për përzierjen e rastësishme të vargjeve dhe vargjeve, zgjedhjen e çelësave të grupeve të rastësishme, përdorimi i njëkohshëm i disa gjeneratorëve me shtetin tuaj të pavarur. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = i ri Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • U zbatua konvertimi i rastit të pavarur nga vendndodhja. Funksionet si strtolower() dhe strtoupper() tani gjithmonë konvertojnë rastin e karaktereve në intervalin ASCII sikur të vendoseshin në lokalitetin "C".
  • U shtuan funksione të reja: 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.
  • U shtuan metoda të reja: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Aftësia për të krijuar në mënyrë dinamike vetitë në një klasë është zhvlerësuar. Në PHP 9.0, qasja në pronat që nuk janë përcaktuar fillimisht në klasë do të rezultojë në një gabim (ErrorException). Klasat që ofrojnë metoda __get dhe __set për krijimin e vetive, ose vetitë dinamike në stdClass do të vazhdojnë të funksionojnë pa ndryshime, vetëm puna e nënkuptuar me veti joekzistente do të mbështetet për të mbrojtur zhvilluesin nga gabimet e fshehura. Për të ruajtur punën e kodit të vjetër, propozohet atributi "#[AllowDynamicProperties]", duke lejuar përdorimin e vetive dinamike.
  • Aftësia për të zëvendësuar vlerat e variablave në vargje duke përdorur shprehjet "${var}" dhe ${(var)} është zhvlerësuar. Mbështetja për zëvendësimet e përdorura zakonisht "{$var}" dhe "$var" është ruajtur. Për shembull: "Përshëndetje {$world}"; OK "Përshëndetje $world"; OK "Përshëndetje ${world}"; I vjetëruar: Përdorimi i ${} në vargje është i vjetëruar
  • Callables të mbështetura pjesërisht të vjetruara që mund të thirren nëpërmjet "call_user_func($callable)" por nuk mbështesin thirrjet në formën e "$callable()": "self::method" "parent::method" "static" ::method " ["vetë", "metodë"] ["prindër", "metodë"] ["statike", "metodë"] ["Foo", "Bar::metodë"] [Foo i ri, "Bar: :metodë" ]
  • Direktiva error_log_mode është shtuar në cilësime, duke ju lejuar të përcaktoni mënyrën e hyrjes në regjistrin e gabimeve.

Burimi: opennet.ru

Shto një koment