PHP 8.2 programmeringsspråk release

Efter ett års utveckling presenterades lanseringen av programmeringsspråket PHP 8.2. Den nya grenen innehåller en rad nya funktioner, samt flera ändringar som bryter kompatibiliteten.

Viktiga förbättringar i PHP 8.2:

  • Lade till möjligheten att markera en klass som skrivskyddad. Egenskaper i sådana klasser kan endast ställas in en gång, varefter de inte kan ändras. Tidigare kunde enskilda klassegenskaper märkas som skrivskyddade, men nu kan du aktivera det här läget för alla klassegenskaper samtidigt. Genom att ange flaggan "skrivskyddad" på klassnivå blockeras också egenskaper från att läggas till dynamiskt i klassen. skrivskyddad klass Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'fel'; // Fel: Kan inte skapa dynamisk egenskap Post::$unknown
  • Tillagda separata typer "true", "false" och "null", som bara kan ta ett giltigt värde och används till exempel för att returnera en funktion med en felavslutningsflagga eller ett tomt värde. Tidigare kunde "true", "false" och "null" endast användas i kombination med andra typer (till exempel "string|false"), men nu kan de användas separat: function alwaysFalse(): false { return false ; }
  • Ger möjlighet att filtrera känsliga parametrar i stackspårningsutgången under ett fel. Att skära bort viss information kan vara nödvändigt när information om fel som uppstår automatiskt skickas till tredjepartstjänster som spårar problem och informerar utvecklare om dem. Du kan till exempel utesluta parametrar som inkluderar användarnamn, lösenord och miljövariabler från spårning. funktionstest( $foo, #[\SensitiveParameter] $lösenord, $baz ) { throw new Exception('Error'); } test('foo', 'lösenord', 'baz'); Fatalt fel: Ofångat undantag: Fel i test.php:8 Stackspårning: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} kastat i test.php på rad 8
  • Tillåts definiera konstanter i egenskaper (egenskap, en mekanism för återanvändning av kod). Konstanter som definieras i en egenskap kan nås via klassen som använder egenskapen (men inte genom egenskapens namn). egenskap Foo { public const KONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatal error } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Lade till möjligheten att specificera typer i disjunktiv normalform (DNF, Disjunctive Normal Form), vilket låter dig kombinera föreningen av typer (samlingar av två eller flera typer) och skärningspunkten av typer (typer vars värden faller under flera typer samtidigt). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } returnera $entity; } }
  • En ny tillägg "Random" har föreslagits med funktioner och klasser för att generera pseudoslumptal och sekvenser. Modulen tillhandahåller ett objektorienterat gränssnitt, låter dig välja olika motorer för att generera pseudoslumptal, inklusive de som är lämpliga för användning i kryptografi, och tillhandahåller hjälpfunktioner, till exempel för att slumpmässigt blanda arrayer och strängar, välja slumpmässiga arraynycklar, samtidig användning av flera generatorer med din egen oberoende stat. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = ny Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Implementerad platsoberoende fallkonvertering. Funktioner som strtolower() och strtoupper() konverterar nu alltid skiftläge för tecken i ASCII-intervallet som om de ställts in på "C"-språket.
  • Lade till nya 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.
  • Lade till nya metoder: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Möjligheten att dynamiskt skapa egenskaper i en klass har föråldrats. I PHP 9.0 kommer åtkomst till egenskaper som inte är definierade från början i klassen att resultera i ett fel (ErrorException). Klasser som tillhandahåller metoder __get och __set för att skapa egenskaper, eller dynamiska egenskaper i stdClass kommer att fortsätta att fungera utan ändringar, endast implicit arbete med icke-existerande egenskaper kommer att stödjas för att skydda utvecklaren från dolda buggar. För att bevara arbetet med den gamla koden, föreslås attributet "#[AllowDynamicProperties]", vilket tillåter användning av dynamiska egenskaper.
  • Möjligheten att ersätta variabelvärden i strängar med uttrycken "${var}" och ${(var)} har föråldrats. Stöd för de vanligt använda "{$var}"- och "$var"-ersättningarna har behållits. Till exempel: "Hej {$world}"; OK "Hej $world"; OK "Hej ${world}"; Utfasad: Att använda ${} i strängar är utfasad
  • Utfasade anropbara som delvis stöds som kan anropas via "call_user_func($callable)" men som inte stöder anrop i form av "$callable()": "self::method" "parent::method" "static" ::metod " ["själv", "metod"] ["förälder", "metod"] ["statisk", "metod"] ["Foo", "Bar::metod"] [ny Foo, "Bar: :metod" ]
  • Direktivet error_log_mode har lagts till i inställningarna, så att du kan bestämma åtkomstläget till felloggen.

Källa: opennet.ru

Lägg en kommentar