PHP 8.2 programmeringsspråk utgivelse

Etter et år med utvikling ble utgivelsen av programmeringsspråket PHP 8.2 presentert. Den nye grenen inkluderer en rekke nye funksjoner, samt flere endringer som bryter kompatibiliteten.

Viktige forbedringer i PHP 8.2:

  • Lagt til muligheten til å merke en klasse som skrivebeskyttet. Egenskaper i slike klasser kan kun settes én gang, deretter vil de ikke være tilgjengelige for endring. Tidligere kunne individuelle klasseegenskaper merkes som skrivebeskyttet, men nå kan du slå på denne modusen for alle klasseegenskapene samtidig. Å spesifisere "skrivebeskyttet"-flagget på klassenivå blokkerer også dynamisk tillegg av egenskaper til klassen. skrivebeskyttet klasse Post { public function __construct( offentlig streng $tittel, offentlig forfatter $author, ) {} } $post = new Post(/* … */); $post->unknown = 'feil'; // Feil: Kan ikke opprette dynamisk egenskap Post::$unknown
  • Lagt til separate typer "true", "false" og "null", som bare kan ta en gyldig verdi og brukes for eksempel til å returnere en funksjon med et feilavslutningsflagg eller en tom verdi. Tidligere kunne "true", "false" og "null" bare brukes sammen med andre typer (for eksempel "string|false"), men nå kan de brukes separat: function alwaysFalse(): false { return usant ; }
  • Gir muligheten til å filtrere sensitive innstillinger i stabelsporingsutgangen på tidspunktet for en feil. Å kutte ut viss informasjon kan være nødvendig når informasjon om feil som oppstår automatisk sendes til tredjepartstjenester som sporer problemer og informerer utviklere om dem. Du kan for eksempel ekskludere parametere fra sporingen som inkluderer brukernavn, passord og miljøvariabler. funksjonstest( $foo, #[\SensitiveParameter] $passord, $baz ) { throw new Exception('Feil'); } test('foo', 'passord', 'baz'); Fatal feil: Ikke fanget Unntak: Feil i test.php:8 Stack trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} kastet i test.php på nett 8
  • Tillatt å definere konstanter i egenskaper (egenskap, en mekanisme for gjenbruk av kode). Konstanter definert i en egenskap kan nås gjennom klassen som bruker egenskapen (men ikke gjennom egenskapsnavnet). egenskap Foo { offentlig konstant KONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatal error } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Lagt til muligheten til å spesifisere typer i den disjunktive normalformen (DNF, Disjunctive Normal Form), som lar deg kombinere foreningen av typer (samlinger av to eller flere typer) og skjæringspunktet mellom typer (typer hvis verdier faller under flere typer samtidig). klasse Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } returner $entity; } }
  • En ny utvidelse "Random" er foreslått med funksjoner og klasser for å generere pseudo-tilfeldige tall og sekvenser. Modulen gir et objektorientert grensesnitt, lar deg velge forskjellige motorer for å generere pseudo-tilfeldige tall, inkludert de som er egnet for bruk i kryptografi, og gir hjelpefunksjoner, for eksempel for tilfeldig blanding av matriser og strenger, valg av tilfeldige matrisenøkler, samtidig bruk av flere generatorer med din egen uavhengige stat. $rng = $er_produksjon? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = ny Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Implementert stedsuavhengig sakskonvertering. Funksjoner som strtolower() og strtoupper() konverterer nå alltid store og små bokstaver til tegn i ASCII-området, som når du setter lokaliteten til "C".
  • Lagt til nye funksjoner: 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.
  • Lagt til nye metoder: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Muligheten til å dynamisk opprette egenskaper i en klasse er utdatert. I PHP 9.0 vil tilgang til egenskaper som ikke er opprinnelig definert i klassen resultere i en feil (ErrorException). Klasser som gir __get og __set metoder for å lage egenskaper, eller dynamiske egenskaper i stdClass vil fortsette å fungere uten endringer, kun implisitt arbeid med ikke-eksisterende egenskaper vil bli støttet for å beskytte utvikleren mot skjulte feil. For å bevare arbeidet til den gamle koden, foreslås attributtet "#[AllowDynamicProperties]", som tillater bruk av dynamiske egenskaper.
  • Muligheten til å erstatte variabelverdier i strenger ved å bruke uttrykkene "${var}" og ${(var)}" er avviklet. Støtte for ofte brukte "{$var}"- og "$var"-erstatninger har blitt beholdt. For eksempel: "Hei {$world}"; OK "Hei $verden"; OK "Hei ${world}"; Utdatert: Bruk av ${} i strenger er utdatert
  • Delvis støttede callables som kan kalles opp via "call_user_func($callable)" har blitt avviklet, men støtter ikke kall i formen "$callable()": "self::method" "parent::method" "static :: metode" ["selv", "metode"] ["foreldre", "metode"] ["statisk", "metode"] ["Foo", "Bar::metode"] [ny Foo, "Bar: :metode" "]
  • Error_log_mode-direktivet er lagt til innstillingene, slik at du kan bestemme tilgangsmodusen til feilloggen.

Kilde: opennet.ru

Legg til en kommentar