PHP 8.3 programmeringsspråk release

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

Viktiga ändringar i PHP 8.3:

  • Under klasskloning är det möjligt att återinitiera egenskaper med attributet "readonly". Åsidosättande av skrivskyddade egenskaper är endast tillåtet i funktionen "__clone": skrivskyddad klass Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // tillåtet även om egenskapen "createdAt" är skrivskyddad. } }
  • Möjligheten att använda konstanter med typindikation i klasser, egenskaper och uppräkningar har tillhandahållits: klass Foo { const string BAR = 'baz'; }
  • Lade till stöd för attributet "#[Override]", med vilket utvecklaren kan informera tolken om att den markerade metoden åsidosätter någon överordnad metod. Om det inte finns någon åsidosättning kommer tolken att visa ett fel.
  • Ändrad hantering av negativa värden som arrayindex. Till exempel, när man lägger till ett element med nummer "-5" till en tom array och lägger till ett annat element, sparades tidigare det andra elementet med index "0", men från och med version PHP 8.3 kommer det att sparas med index "-4" . $array = []; $array[-5] = 'a'; $array[] = 'b'; var_export($array); // Var array (-5 => 'a', 0 => 'b') // Blev array (-5 => 'a', -4 => 'b')
  • Lade till möjligheten att skapa anonyma klasser i skrivskyddat läge: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Lade till funktionen json_validate() för att snabbt kontrollera om en sträng är i JSON-format utan att utföra avkodningsoperationer. json_validate(sträng $json, int $depth = 512, int $flags = 0): bool
  • Nya metoder har lagts till i klassen Randomizer, som tillhandahåller ett högnivå-API för att generera pseudoslumptal och sekvenser: getBytesFromString för att generera en sträng av en given storlek, med användning av tecknen i en annan sträng i slumpmässig ordning; getFloat och nextFloat för att generera ett slumpmässigt flyttal som faller inom det angivna intervallet.
  • Lade till möjligheten att hämta konstanter med dynamisk klasssyntax: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Tidigare, för att hämta BAR-konstanten, var du tvungen att anropa constant(Foo::class . '::' . $name); // Ange bara Foo::{$name};
  • Lagt till generering av individuella undantag (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) vid problem som uppstår i operationer som arbetar med datum och tid.
  • Förbättrad hantering av fel som uppstår under analys av serialiserade data i unserialize()-funktionen. I händelse av problem skickar unserialize() nu E_WARNING istället för E_NOTICE.
  • Ändringar har gjorts i range()-funktionen. Ett undantag genereras när man försöker skicka objekt, resurser eller arrayer i variabler som definierar intervallgränser, såväl som när man anger ett negativt värde i parametern $step eller ett odefinierat värde i någon parameter. Tillhandahåller utmatning av en lista med tecken när du anger strängar istället för siffror (till exempel "range('5', 'z')").
  • Ändrade beteendet för egenskaper med statiska egenskaper, som nu åsidosätter statiska egenskaper som ärvts från den överordnade klassen.
  • Lade till inställningar för stackspillskydd. Direktiven zend.max_allowed_stack_size och zend.reserved_stack_size har lagts till i ini-filen och definierar den maximalt tillåtna och reserverade stackstorleken. Programmet kommer att krascha när det närmar sig stackutmattning, när stacken är full mer än skillnaden mellan zend.max_allowed_stack_size och zend.reserved_stack_size (exekveringen avbryts innan ett segmenteringsfel inträffar). Som standard är värdet för zend.max_allowed_stack_size satt till 0 (0—storleken bestäms automatiskt; för att inaktivera begränsningen kan du ställa in den på -1).
  • Lade till nya POSIX-funktioner posix_sysconf(), posix_pathconf(), posix_fpathconf() och posix_eaccess().
  • Funktionen mb_str_pad har lagts till, som är en analog till str_pad()-strängfunktionen, designad för att fungera med multi-byte-kodningar som UTF-8.
  • Låter dig skapa stängningar från metoder och skicka namngivna argument till dessa stängningar. $test = new Test(); $closure = $test->magic(...); $closure(a: 'hej', b: 'värld');
  • Ändrat beteende vid hantering av synligheten av konstanter i gränssnitt. gränssnitt I { public const FOO = 'foo'; } klass C implementerar I { private const FOO = 'foo'; }
  • Möjligheterna för funktionerna array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() och proc_get_status() har utökats.
  • Möjligheten att skicka ett negativt $widths-värde till mb_strimwidth() har föråldrats. NumberFormatter::TYPE_CURRENCY-konstanten har tagits bort. Stöd för anrop av ldap_connect()-funktionen med två parametrar $host och $port har upphört. Inställningen opcache.consistency_checks har tagits bort.

Källa: opennet.ru

Lägg en kommentar