PHP 8.3 programmeringsspråk utgivelse

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

Viktige endringer i PHP 8.3:

  • Under klassekloning er det mulig å reinitialisere egenskaper med «readonly»-attributtet. Overstyring av skrivebeskyttede egenskaper er kun tillatt inne i "__clone"-funksjonen: readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // tillatt selv om egenskapen "createdAt" er skrivebeskyttet. } }
  • Muligheten til å bruke konstanter med typeindikasjon i klasser, egenskaper og oppregninger er gitt: klasse Foo { const string BAR = 'baz'; }
  • Lagt til støtte for "#[Override]"-attributtet, som utvikleren kan informere tolken om at den merkede metoden overstyrer en overordnet metode. Hvis det ikke er noen overstyring, vil tolken vise en feil.
  • Endret håndtering av negative verdier som en matriseindeks. For eksempel, når du legger til et element med nummer "-5" til en tom matrise og legger til et annet element, ble det andre elementet tidligere lagret med indeks "0", men fra og med versjon PHP 8.3 vil det bli lagret med indeks "-4" . $array = []; $array[-5] = 'a'; $array[] = 'b'; var_eksport($array); // Var array (-5 => 'a', 0 => 'b') // Ble array (-5 => 'a', -4 => 'b')
  • Lagt til muligheten til å lage anonyme klasser i skrivebeskyttet modus: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Lagt til funksjonen json_validate() for raskt å sjekke om en streng er i JSON-format uten å utføre dekodingsoperasjoner. json_validate(streng $json, int $depth = 512, int $flags = 0): bool
  • Nye metoder er lagt til Randomizer-klassen, som gir et høyt nivå API for å generere pseudo-tilfeldige tall og sekvenser: getBytesFromString for å generere en streng av en gitt størrelse, ved å bruke i tilfeldig rekkefølge tegnene som finnes i en annen streng; getFloat og nextFloat for å generere et tilfeldig flyttall som faller innenfor det angitte området.
  • Lagt til muligheten til å hente konstanter ved hjelp av dynamisk klassesyntaks: klasse Foo { const BAR = 'bar'; } $name = 'BAR'; // Tidligere, for å hente BAR-konstanten, måtte du kalle konstant(Foo::class . '::' . $name); // Nå bare spesifiser Foo::{$name};
  • Lagt til generering av individuelle unntak (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) i tilfelle problemer som oppstår i operasjoner som arbeider med datoer og klokkeslett.
  • Forbedret håndtering av feil som oppstår under parsing av serialiserte data i unserialize()-funksjonen. I tilfelle problemer sender unserialize() nå E_WARNING i stedet for E_NOTICE.
  • Det er gjort endringer i range()-funksjonen. Et unntak genereres når man forsøker å sende objekter, ressurser eller matriser i variabler som definerer områdegrenser, så vel som når man spesifiserer en negativ verdi i $step-parameteren eller en udefinert verdi i en hvilken som helst parameter. En liste over tegn kan nå skrives ut når du spesifiserer strenger i stedet for tall (for eksempel "range('5', 'z')").
  • Endret oppførselen til egenskaper med statiske egenskaper, som nå overstyrer statiske egenskaper som er arvet fra den overordnede klassen.
  • Lagt til innstillinger for stabeloverløpsbeskyttelse. Direktivene zend.max_allowed_stack_size og zend.reserved_stack_size er lagt til ini-filen, og definerer maksimal tillatt og reservert stabelstørrelse. Programmet vil krasje når man nærmer seg utmattelse av stabelen, når stabelen er full mer enn forskjellen mellom zend.max_allowed_stack_size og zend.reserved_stack_size (utførelsen vil stoppe før en segmenteringsfeil oppstår). Som standard er zend.max_allowed_stack_size-verdien satt til 0 (0—størrelsen bestemmes automatisk; for å deaktivere begrensningen kan du sette den til -1).
  • Lagt til nye POSIX-funksjoner posix_sysconf(), posix_pathconf(), posix_fpathconf() og posix_eaccess().
  • mb_str_pad-funksjonen er lagt til, som er en analog av str_pad()-strengfunksjonen, designet for å fungere med multi-byte-kodinger som UTF-8.
  • Lar deg lage stengninger fra metoder og sende navngitte argumenter til disse stengningene. $test = ny Test(); $closure = $test->magic(...); $closure(a: 'hei', b: 'verden');
  • Endret oppførsel ved håndtering av synligheten av konstanter i grensesnitt. grensesnitt I { public const FOO = 'foo'; } klasse C implementerer I { private const FOO = 'foo'; }
  • Mulighetene til funksjonene array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() og proc_get_status() er utvidet.
  • Muligheten til å sende en negativ $widths-verdi til mb_strimwidth() er avviklet. NumberFormatter::TYPE_CURRENCY-konstanten er fjernet. Støtte for å kalle ldap_connect()-funksjonen med to parametere $host og $port har blitt avviklet. Opcache.consistency_checks-innstillingen er fjernet.

Kilde: opennet.ru

Legg til en kommentar