Frigivelse af programmeringssproget PHP 8.3

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

Vigtigste ændringer i PHP 8.3:

  • Under klassekloning er det muligt at geninitialisere egenskaber med "readonly"-attributten. Tilsidesættelse af skrivebeskyttede egenskaber er kun tilladt i "__clone"-funktionen: readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // tilladt, selvom egenskaben "createdAt" er skrivebeskyttet. } }
  • Muligheden for at bruge konstanter med typeangivelse i klasser, træk og opregninger er tilvejebragt: klasse Foo { const string BAR = 'baz'; }
  • Tilføjet understøttelse af "#[Override]" attributten, hvormed udvikleren kan informere tolken om, at den markerede metode tilsidesætter en overordnet metode. Hvis der ikke er nogen tilsidesættelse, vil tolken vise en fejl.
  • Ændret håndtering af negative værdier som et array-indeks. For eksempel, når du tilføjer et element med nummer "-5" til et tomt array og tilføjer et andet element, blev det andet element tidligere gemt med indeks "0", men fra version PHP 8.3 vil det blive gemt med indeks "-4" . $array = []; $array[-5] = 'a'; $array[] = 'b'; var_eksport($array); // Var array (-5 => 'a', 0 => 'b') // Blev array (-5 => 'a', -4 => 'b')
  • Tilføjet muligheden for at oprette anonyme klasser i skrivebeskyttet tilstand: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Tilføjet json_validate() funktion for hurtigt at kontrollere, om en streng er i JSON-format uden at udføre afkodningsoperationer. json_validate(streng $json, int $depth = 512, int $flag = 0): bool
  • Nye metoder er blevet tilføjet til Randomizer-klassen, som giver et højt niveau API til generering af pseudo-tilfældige tal og sekvenser: getBytesFromString til at generere en streng af en given størrelse, ved at bruge i tilfældig rækkefølge de tegn, der findes i en anden streng; getFloat og nextFloat for at generere et tilfældigt flydende decimaltal, der falder inden for det angivne interval.
  • Tilføjet muligheden for at hente konstanter ved hjælp af dynamisk klassesyntaks: klasse Foo { const BAR = 'bar'; } $name = 'BAR'; // Tidligere, for at hente BAR-konstanten, skulle du kalde konstant(Foo::class . '::' . $name); // Angiv nu bare Foo::{$name};
  • Tilføjet generering af individuelle undtagelser (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) i tilfælde af problemer, der opstår i operationer, der arbejder med datoer og klokkeslæt.
  • Forbedret håndtering af fejl, der opstår under parsing af serialiserede data i unserialize()-funktionen. I tilfælde af problemer udsender unserialize() nu E_WARNING i stedet for E_NOTICE.
  • Der er foretaget ændringer i range()-funktionen. En undtagelse genereres, når man forsøger at sende objekter, ressourcer eller arrays i variabler, der definerer områdegrænser, såvel som når der angives en negativ værdi i $step-parameteren eller en udefineret værdi i en hvilken som helst parameter. En liste over tegn kan nu udlæses, når strenge angives i stedet for tal (f.eks. "range('5', 'z')").
  • Ændrede adfærden for egenskaber med statiske egenskaber, som nu tilsidesætter statiske egenskaber nedarvet fra den overordnede klasse.
  • Tilføjede indstillinger for stak overløbsbeskyttelse. Direktiverne zend.max_allowed_stack_size og zend.reserved_stack_size er blevet tilføjet til ini-filen, der definerer den maksimalt tilladte og reserverede stakstørrelse. Programmet vil gå ned, når det nærmer sig stackudmattelse, når stakken er fuld mere end forskellen mellem zend.max_allowed_stack_size og zend.reserved_stack_size (udførelsen stopper før en segmenteringsfejl opstår). Som standard er zend.max_allowed_stack_size-værdien sat til 0 (0—størrelsen bestemmes automatisk; for at deaktivere begrænsningen kan du indstille den til -1).
  • Tilføjet nye POSIX-funktioner posix_sysconf(), posix_pathconf(), posix_fpathconf() og posix_eaccess().
  • Funktionen mb_str_pad er blevet tilføjet, som er en analog af str_pad()-strengfunktionen, designet til at arbejde med multi-byte-kodninger såsom UTF-8.
  • Giver dig mulighed for at oprette lukninger fra metoder og videregive navngivne argumenter til disse lukninger. $test = ny Test(); $closure = $test->magic(...); $closure(a: 'hej', b: 'verden');
  • Ændret adfærd ved håndtering af synligheden af ​​konstanter i grænseflader. interface I { public const FOO = 'foo'; } klasse C implementerer I { private const FOO = 'foo'; }
  • Mulighederne for funktionerne array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() og proc_get_status() er blevet udvidet.
  • Muligheden for at overføre en negativ $widths værdi til mb_strimwidth() er blevet forældet. NumberFormatter::TYPE_CURRENCY konstanten er blevet fjernet. Understøttelse af kald af ldap_connect()-funktionen med to parametre $host og $port er blevet afbrudt. Indstillingen opcache.consistency_checks er blevet fjernet.

Kilde: opennet.ru

Tilføj en kommentar