Na 'n jaar van ontwikkeling is die vrystelling van die PHP 8.3-programmeertaal aangebied. Die nuwe tak bevat 'n reeks nuwe kenmerke, sowel as verskeie veranderinge wat versoenbaarheid verbreek.
Sleutelveranderinge in PHP 8.3:
- Tydens klaskloning is dit moontlik om eienskappe te herinitialiseer met die "leesalleen"-kenmerk. Die oorheersing van leesalleen-eienskappe word slegs binne die “__clone”-funksie toegelaat: readonly class Post { public function __construct( public DateTime $createdAt, ) {} publieke funksie __clone() { $this->createdAt = new DateTime(); // toegelaat selfs al is die "createdAt"-eienskap leesalleen. } }
- Die vermoë om konstantes met tipe aanduiding in klasse, eienskappe en opsommings te gebruik, is voorsien: klas Foo { const string BAR = 'baz'; }
- Bygevoeg ondersteuning vir die "#[Oorride]" kenmerk, waarmee die ontwikkelaar die tolk kan inlig dat die gemerkte metode een of ander ouermetode ignoreer. As daar geen ignorering is nie, sal die tolk 'n fout vertoon.
- Veranderde hantering van negatiewe waardes as 'n skikkingsindeks. Byvoorbeeld, wanneer 'n element met nommer "-5" by 'n leë skikking gevoeg word en nog 'n element bygevoeg word, is die tweede element voorheen met indeks "0" gestoor, maar vanaf weergawe PHP 8.3 sal dit gestoor word met indeks "-4" . $skikking = []; $array[-5] = 'a'; $array[] = 'b'; var_export($array); // Was skikking (-5 => 'a', 0 => 'b') // Het skikking geword (-5 => 'a', -4 => 'b')
- Bygevoeg die vermoë om anonieme klasse in leesalleen-modus te skep: $class = new readonly class { public function __construct(public string $foo = 'bar', ) {} };
- Bygevoeg json_validate() funksie om vinnig te kyk of 'n string in JSON-formaat is sonder om dekoderingsoperasies uit te voer. json_validate(string $json, int $depth = 512, int $vlae = 0): bool
- Nuwe metodes is by die Randomizer-klas gevoeg, wat 'n hoëvlak-API bied vir die generering van pseudo-ewekansige getalle en rye: getBytesFromString vir die generering van 'n string van 'n gegewe grootte, deur die karakters wat in 'n ander string teenwoordig is, in ewekansige volgorde te gebruik; getFloat en nextFloat om 'n ewekansige drywende puntgetal te genereer wat binne die gespesifiseerde reeks val.
- Bygevoeg die vermoë om konstantes te herwin deur dinamiese klassintaksis te gebruik: klas Foo { const BAR = 'bar'; } $name = 'BAR'; // Voorheen, om die BAR-konstante te herwin, moes jy konstante (Foo::klas . '::' . $name) noem; // Spesifiseer nou net Foo::{$name};
- Bygevoeg generasie van individuele uitsonderings (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) in die geval van probleme wat ontstaan in bedrywighede wat met datums en tyd werk.
- Verbeterde hantering van foute wat voorkom tydens die ontleding van geserialiseerde data in die unserialize() funksie. In die geval van probleme, reik unserialize() nou E_WARNING uit in plaas van E_NOTICE.
- Veranderinge is aan die reeks()-funksie aangebring. 'n Uitsondering word gegenereer wanneer probeer om voorwerpe, hulpbronne of skikkings deur te gee in veranderlikes wat reeksgrense definieer, sowel as wanneer 'n negatiewe waarde in die $step-parameter of 'n ongedefinieerde waarde in enige parameter gespesifiseer word. 'n Lys karakters kan nou uitgevoer word wanneer stringe in plaas van getalle gespesifiseer word (byvoorbeeld, "reeks('5', 'z')").
- Verander die gedrag van eienskappe met statiese eienskappe, wat nou statiese eienskappe oorheers wat van die ouerklas geërf is.
- Bygevoeg instellings vir stapel oorloop beskerming. Die zend.max_allowed_stack_size en zend.reserved_stack_size-aanwysings is by die ini-lêer gevoeg, wat die maksimum toegelate en gereserveerde stapelgrootte definieer. Die program sal ineenstort wanneer stapeluitputting nader, wanneer die stapel meer vol is as die verskil tussen zend.max_allowed_stack_size en zend.reserved_stack_size (uitvoering sal stop voordat 'n segmenteringsfout plaasvind). By verstek is die zend.max_allowed_stack_size-waarde op 0 gestel (0—die grootte word outomaties bepaal; om die beperking te deaktiveer, kan jy dit op -1 stel).
- Bygevoeg nuwe POSIX funksies posix_sysconf(), posix_pathconf(), posix_fpathconf() en posix_eaccess().
- Die mb_str_pad-funksie is bygevoeg, wat 'n analoog van die str_pad()-stringfunksie is, wat ontwerp is om met multi-grepe-enkoderings soos UTF-8 te werk.
- Laat jou toe om sluitings van metodes te skep en benoemde argumente na daardie sluitings deur te gee. $toets = nuwe toets(); $closure = $test->magic(...); $closure(a: 'hallo', b: 'wêreld');
- Veranderde gedrag wanneer die sigbaarheid van konstantes in koppelvlakke hanteer word. koppelvlak I { public const FOO = 'foo'; } klas C implemente I { private const FOO = 'foo'; }
- Die vermoëns van die array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() en proc_get_status() funksies is uitgebrei.
- Die vermoë om 'n negatiewe $widths-waarde na mb_strimwidth() deur te gee, is opgeskort. Die NumberFormatter::TYPE_CURRENCY konstante is verwyder. Ondersteuning vir die oproep van die ldap_connect() funksie met twee parameters $host en $port is gestaak. Die opcache.consistency_checks-instelling is verwyder.
Bron: opennet.ru
