Frigivelse af programmeringssproget PHP 8.2

Efter et års udvikling blev udgivelsen af ​​programmeringssproget PHP 8.2 præsenteret. Den nye filial indeholder en række nye funktioner samt adskillige ændringer, der bryder kompatibiliteten.

Vigtigste forbedringer i PHP 8.2:

  • Tilføjet muligheden for at markere en klasse som skrivebeskyttet. Egenskaber i sådanne klasser kan kun indstilles én gang, hvorefter de ikke kan ændres. Tidligere kunne individuelle klasseegenskaber markeres som skrivebeskyttet, men nu kan du aktivere denne tilstand for alle klasseegenskaber på én gang. Angivelse af flaget "skrivebeskyttet" på klasseniveau blokerer også for, at egenskaber tilføjes dynamisk til klassen. skrivebeskyttet klasse Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'forkert'; // Fejl: Kan ikke oprette dynamisk egenskab Post::$unknown
  • Tilføjet separate typer "true", "false" og "null", som kun kan tage én gyldig værdi og bruges for eksempel til at returnere en funktion med et fejlafslutningsflag eller en tom værdi. Tidligere kunne "true", "false" og "null" kun bruges sammen med andre typer (f.eks. "string|false"), men nu kan de bruges separat: function alwaysFalse(): false { return false ; }
  • Giver mulighed for at filtrere følsomme parametre i staksporingsoutputtet under en fejl. Det kan være nødvendigt at skære visse oplysninger ud, når oplysninger om fejl, der opstår, automatisk sendes til tredjepartstjenester, der sporer problemer og informerer udviklere om dem. For eksempel kan du ekskludere parametre, der inkluderer brugernavne, adgangskoder og miljøvariabler, fra sporing. funktionstest( $foo, #[\SensitiveParameter] $adgangskode, $baz ) { throw new Exception('Fejl'); } test('foo', 'adgangskode', 'baz'); Fatal fejl: Ufanget Undtagelse: Fejl i test.php:8 Stack trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} smidt i test.php på linje 8
  • Tilladt at definere konstanter i træk (egenskab, en mekanisme til genbrug af kode). Konstanter defineret i en egenskab kan tilgås gennem den klasse, der bruger egenskaben (men ikke gennem egenskabsnavnet). egenskab Foo { public const KONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatal error } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Tilføjet muligheden for at specificere typer i den disjunktive normalform (DNF, Disjunctive Normal Form), som giver dig mulighed for at kombinere foreningen af ​​typer (samlinger af to eller flere typer) og skæringspunktet mellem typer (typer, hvis værdier falder ind under flere typer samtidigt). klasse Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } returner $entity; } }
  • En ny udvidelse "Random" er blevet foreslået med funktioner og klasser til generering af pseudo-tilfældige tal og sekvenser. Modulet giver en objektorienteret grænseflade, giver dig mulighed for at vælge forskellige motorer til generering af pseudo-tilfældige tal, inklusive dem, der er egnede til brug i kryptografi, og giver hjælpefunktioner, for eksempel til tilfældig blanding af arrays og strenge, valg af tilfældige array-nøgler, samtidig brug af flere generatorer med din egen uafhængige stat. $rng = $er_produktion? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = ny Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Implementeret stedsuafhængig sagskonvertering. Funktioner som strtolower() og strtoupper() konverterer nu altid store og små bogstaver i tegn i ASCII-området, som om de var sat til "C"-lokaliteten.
  • Tilføjede nye funktioner: 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.
  • Tilføjet nye metoder: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Muligheden for dynamisk at oprette egenskaber i en klasse er blevet forældet. I PHP 9.0 vil adgang til egenskaber, der ikke oprindeligt er defineret i klassen, resultere i en fejl (ErrorException). Klasser, der giver __get og __set metoder til at skabe egenskaber, eller dynamiske egenskaber i stdClass vil fortsætte med at arbejde uden ændringer, kun implicit arbejde med ikke-eksisterende egenskaber vil blive understøttet for at beskytte udvikleren mod skjulte fejl. For at bevare den gamle kodes arbejde foreslås "#[AllowDynamicProperties]" attributten, hvilket tillader brugen af ​​dynamiske egenskaber.
  • Muligheden for at erstatte variabelværdier i strenge ved hjælp af udtrykkene "${var}" og ${(var)} er blevet forældet. Understøttelse af de almindeligt anvendte "{$var}"- og "$var"-erstatninger er blevet bibeholdt. For eksempel: "Hej {$world}"; OK "Hej $verden"; OK "Hej ${world}"; Forældet: Brug af ${} i strenge er forældet
  • Forældede delvist understøttede callables, der kan kaldes via "call_user_func($callable)", men som ikke understøtter opkald i form af "$callable()": "self::method" "parent::method" "static" ::metode " ["selv", "metode"] ["forælder", "metode"] ["statisk", "metode"] ["Foo", "Bar::metode"] [ny Foo, "Bar: :metode" ]
  • Error_log_mode-direktivet er blevet tilføjet til indstillingerne, så du kan bestemme adgangstilstanden til fejlloggen.

Kilde: opennet.ru

Tilføj en kommentar