PHP 8.2 programmeerimiskeele väljalase

Pärast aastast arendustööd esitleti PHP 8.2 programmeerimiskeele väljalaset. Uus haru sisaldab mitmeid uusi funktsioone, aga ka mitmeid muudatusi, mis rikuvad ühilduvust.

PHP 8.2 peamised täiustused:

  • Lisati võimalus märkida klass kirjutuskaitstuks. Selliste klasside omadusi saab määrata ainult üks kord, pärast seda ei saa neid muuta. Varem sai üksikuid klassi atribuute märkida kirjutuskaitstuks, kuid nüüd saate selle režiimi lubada kõigi klasside atribuutide jaoks korraga. Lipu "kirjutuskaitstud" määramine klassi tasemel blokeerib ka atribuutide dünaamilise lisamise klassi. readonly class Postitus { public function __construct( public string $pealkiri, public Autor $autor, ) {} } $post = new Postitus(/* … */); $post->unknown = 'vale'; // Viga: dünaamilist atribuuti ei saa luua Post::$unknown
  • Lisatud on eraldi tüübid “true”, “false” ja “null”, mis võivad võtta ainult ühe kehtiva väärtuse ja mida kasutatakse näiteks vea lõpetamise lipu või tühja väärtusega funktsiooni tagastamiseks. Varem sai "true", "false" ja "null" kasutada ainult koos teiste tüüpidega (näiteks "string|false"), kuid nüüd saab neid kasutada eraldi: function alwaysFalse(): false { return false ; }
  • Annab võimaluse filtreerida tundlikke parameetreid virnajälje väljundis vea ajal. Teatud teabe väljalõikamine võib osutuda vajalikuks, kui teave ilmnevate vigade kohta saadetakse automaatselt kolmandate osapoolte teenustele, mis jälgivad probleeme ja teavitavad neist arendajaid. Näiteks saate jätta jälgimisest välja parameetrid, mis sisaldavad kasutajanimesid, paroole ja keskkonnamuutujaid. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'parool', 'baz'); Saatuslik viga: tabamata Erand: viga failis test.php: 8 Pinu jälg: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} visatud faili test.php real 8
  • Lubatud defineerida tunnustes konstante (tunnus, koodi taaskasutamise mehhanism). Tunnuses määratletud konstantidele pääseb juurde tunnust kasutava klassi kaudu (kuid mitte tunnuse nime kaudu). tunnus Foo { public const CONSTANT = 1; public function bar(): int { return ise::CONSTANT; // Saatuslik viga } } class Bar { use Foo; } var_dump(riba::CONSTANT); // 1
  • Lisatud on võimalus määrata tüüpe disjunktiivsel normaalvormil (DNF, Disjunctive Normal Form), mis võimaldab ühendada tüüpide liidu (kahe või enama tüübi kogud) ja tüüpide ristumiskoha (tüübid, mille väärtused kuuluvad mitme alla). tüübid korraga). class Foo { public function bar((A&B)|null $üksus) { if ($üksus === null) { return null; } return $ entity; } }
  • Pseudojuhuslike arvude ja jadade genereerimiseks on välja pakutud uus laiendus "Juhuslik" funktsioonide ja klassidega. Moodul pakub objektorienteeritud liidest, võimaldab valida pseudojuhuslike arvude genereerimiseks erinevaid mootoreid, sh krüptograafias kasutamiseks sobivaid mootoreid ning pakub abifunktsioone näiteks massiivide ja stringide juhuslikuks segamiseks, juhuslike massiivivõtmete valimiseks, mitme generaatori samaaegne kasutamine oma iseseisva olekuga. $rng = $on_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $juhustav = new Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Rakendatud lokaadist sõltumatu juhtumite teisendamine. Funktsioonid nagu strtolower() ja strtoupper() teisendavad nüüd alati ASCII-vahemikus olevate märkide suur- ja väiketähti, nagu oleksid need seatud lokaadile "C".
  • Lisatud uued funktsioonid: 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.
  • Lisatud uued meetodid: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Võimalus klassis atribuute dünaamiliselt luua on aegunud. PHP 9.0 puhul põhjustab klassis algselt määratlemata omadustele juurdepääs tõrketeate (ErrorException). Klassid, mis pakuvad atribuutide loomiseks __get ja __set meetodeid või stdClassi dünaamilisi atribuute, jätkavad tööd muudatusteta, arendaja kaitsmiseks peidetud vigade eest toetatakse ainult kaudset tööd olematute atribuutidega. Vana koodi töö säilitamiseks pakutakse välja atribuut “#[AllowDynamicProperties]”, mis võimaldab kasutada dünaamilisi omadusi.
  • Võimalus asendada muutujate väärtusi stringideks, kasutades avaldisi "${var}" ja ${(var)}, on aegunud. Tavaliselt kasutatavate asenduste "{$var}" ja "$var" tugi on säilinud. Näiteks: "Tere, {$maailm}"; OK "Tere $maailm"; OK "Tere ${world}"; Aegunud: ${} kasutamine stringides on aegunud
  • Aegunud osaliselt toetatud helistatavad failid, mida saab kutsuda "call_user_func($callable)" kaudu, kuid mis ei toeta helistamist kujul "$callable()": "self::method" "parent::method" "static" ::method " ["ise", "meetod"] ["vanem", "meetod"] ["staatiline", "meetod"] ["Foo", "Bar::method"] [uus Foo, "Bar: :method" ]
  • Seadetesse on lisatud direktiiv error_log_mode, mis võimaldab teil määrata tõrkelogi juurdepääsurežiimi.

Allikas: opennet.ru

Lisa kommentaar