PHP 8.2 ohjelmointikielen julkaisu

Vuoden kehitystyön jälkeen esiteltiin PHP 8.2 -ohjelmointikielen julkaisu. Uusi haara sisältää joukon uusia ominaisuuksia sekä useita yhteensopivuuden rikkovia muutoksia.

Tärkeimmät parannukset PHP 8.2:ssa:

  • Lisätty mahdollisuus merkitä luokka vain luku -muotoiseksi. Tällaisten luokkien ominaisuudet voidaan asettaa vain kerran, minkä jälkeen niitä ei voi muuttaa. Aiemmin yksittäiset luokan ominaisuudet voitiin merkitä vain luku -muotoisiksi, mutta nyt voit ottaa tämän tilan käyttöön kaikille luokan ominaisuuksille kerralla. "Vain luku" -lipun määrittäminen luokkatasolla estää myös ominaisuuksien dynaamisen lisäämisen luokkaan. readonly class Viesti { julkinen toiminto __konstrukti( julkinen merkkijono $otsikko, julkinen tekijä $author, ) {} } $post = new Viesti(/* … */); $post->tuntematon = 'väärin'; // Virhe: Dynaamista ominaisuutta ei voi luoda Viesti::$tuntematon
  • Lisätty erilliset tyypit "true", "false" ja "null", jotka voivat ottaa vain yhden kelvollisen arvon ja joita käytetään esimerkiksi palauttamaan funktio virheen lopetuslipulla tai tyhjällä arvolla. Aiemmin "true", "false" ja "null" voitiin käyttää vain yhdessä muiden tyyppien kanssa (esim. "string|false"), mutta nyt niitä voidaan käyttää erikseen: function alwaysFalse(): false { return false ; }
  • Tarjosi mahdollisuuden suodattaa arkaluonteisia asetuksia pinojäljityksen lähdössä virheen sattuessa. Tiettyjen tietojen leikkaaminen voi olla tarpeen, kun tiedot tapahtuvista virheistä lähetetään automaattisesti kolmannen osapuolen palveluihin, jotka seuraavat ongelmia ja ilmoittavat niistä kehittäjille. Voit esimerkiksi jättää jäljestä pois parametreja, jotka sisältävät käyttäjänimiä, salasanoja ja ympäristömuuttujia. funktiotesti( $foo, #[\SensitiveParameter] $salasana, $baz ) { throw new Exception('Error'); } test('foo', 'salasana', 'baz'); Vakava virhe: Ei havaittu Poikkeus: Virhe test.php:ssa:8 Pinon jäljitys: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} heitetty test.php:ssä verkossa 8
  • Sallittu määrittää vakioita piirteisiin (ominaisuus, mekanismi koodin uudelleenkäyttöön). Ominaisuudessa määriteltyihin vakioihin pääsee käsiksi ominaisuutta käyttävän luokan kautta (mutta ei ominaisuuden nimen kautta). ominaisuus Foo { julkinen vakio VAKIO = 1; public function bar(): int { return self::CONSTANT; // Vakava virhe } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Lisätty mahdollisuus määrittää tyyppejä disjunktiivisessa normaalimuodossa (DNF, Disjunctive Normal Form), jonka avulla voit yhdistää tyyppien liiton (kahden tai useamman tyypin kokoelmat) ja tyyppien risteyksen (tyypit, joiden arvot kuuluvat useiden tyyppejä samanaikaisesti). class Foo { julkinen funktio bar((A&B)|null $entiteetti) { if ($entity === null) { return null; } return $entity; } }
  • Uusi laajennus "Random" on ehdotettu funktioilla ja luokilla pseudosatunnaislukujen ja -sarjojen generoimiseksi. Moduuli tarjoaa oliokäyttöliittymän, mahdollistaa erilaisten pseudosatunnaislukujen generointikoneiden valitsemisen, mukaan lukien kryptografiaan soveltuvat, ja tarjoaa aputoimintoja esimerkiksi taulukoiden ja merkkijonojen satunnaiseen sekoittamiseen, satunnaisten taulukkoavainten valitsemiseen, useiden generaattoreiden samanaikainen käyttö omalla itsenäisellä tilassasi. $rng = $on_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = uusi Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Toteutettu alueesta riippumaton tapauksen muunnos. Funktiot, kuten strtolower() ja strtoupper() muuntaa nyt aina ASCII-alueen merkkien isot ja pienet kirjaimet, kuten asetettaessa maa-asetukseksi "C".
  • Lisätty uusia toimintoja: 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.
  • Lisätty uusia menetelmiä: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Mahdollisuus luoda dynaamisesti luokassa olevia ominaisuuksia on poistettu käytöstä. PHP 9.0:ssa sellaisten ominaisuuksien käyttäminen, joita ei ole alun perin määritelty luokassa, johtaa virheeseen (ErrorException). Luokat, jotka tarjoavat __get- ja __set-menetelmiä ominaisuuksien luomiseen tai dynaamisia ominaisuuksia stdClassissa, toimivat edelleen ilman muutoksia. Vain implisiittistä työtä olemattomien ominaisuuksien kanssa tuetaan kehittäjän suojaamiseksi piilotetuilta virheiltä. Vanhan koodin toiminnan säilyttämiseksi ehdotetaan "#[AllowDynamicProperties]"-attribuuttia, joka sallii dynaamisten ominaisuuksien käytön.
  • Mahdollisuus korvata muuttujan arvoja merkkijonoiksi käyttämällä lausekkeita "${var}" ja ${(var)} on vanhentunut. Yleisesti käytettyjen "{$var}" ja "$var" korvausten tuki on säilytetty. Esimerkiksi: "Hei {$world}"; OK "Hei $maailma"; OK "Hei ${world}"; Vanhentunut: ${} käyttäminen merkkijonoissa on vanhentunut
  • Osittain tuetut kutsuttavat tiedostot, joita voidaan kutsua "call_user_func($callable)":n kautta, on poistettu käytöstä, mutta ne eivät tue kutsumista muodossa "$callable()": "self::method" "parent::method" "static :: menetelmä" ["itse", "menetelmä"] ["parent", "method"] ["staattinen", "menetelmä"] ["Foo", "Bar::method"] [uusi Foo, "Bar: :method" "]
  • Error_log_mode-direktiivi on lisätty asetuksiin, jonka avulla voit määrittää virhelokin käyttötavan.

Lähde: opennet.ru

Lisää kommentti