Pēc gada izstrādes tika prezentēta PHP 8.3 programmēšanas valodas izlaidums. Jaunajā filiālē ir iekļauta virkne jaunu funkciju, kā arī vairākas izmaiņas, kas traucē saderību.
Galvenās izmaiņas PHP 8.3 versijā:
- Klases klonēšanas laikā ir iespējams atkārtoti inicializēt rekvizītus ar atribūtu “tikai lasāms”. Tikai lasāmo rekvizītu ignorēšana ir atļauta tikai funkcijā “__clone”: readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // atļauts, lai gan rekvizīts "createdAt" ir tikai lasāms. } }
- Ir nodrošināta iespēja izmantot konstantes ar tipa norādi klasēs, pazīmēs un uzskaitījumos: class Foo { const string BAR = 'baz'; }
- Pievienots atbalsts atribūtam “#[Override]”, ar kuru izstrādātājs var informēt tulku, ka atzīmētā metode ignorē kādu vecākmetodi. Ja nav ignorēšanas, tulks parādīs kļūdu.
- Mainīta negatīvo vērtību apstrāde kā masīva indekss. Piemēram, pievienojot tukšam masīvam elementu ar skaitli “-5” un pievienojot vēl vienu elementu, iepriekš otrais elements tika saglabāts ar indeksu “0”, bet sākot no PHP 8.3 versijas tiks saglabāts ar indeksu “-4” . $masīvs = []; $masīvs[-5] = 'a'; $masīvs[] = 'b'; var_export($masīvs); // Bija masīvs (-5 => 'a', 0 => 'b') // Kļuva par masīvu (-5 => 'a', -4 => 'b')
- Pievienota iespēja izveidot anonīmas klases tikai lasīšanas režīmā: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
- Pievienota funkcija json_validate(), lai ātri pārbaudītu, vai virkne ir JSON formātā, neveicot dekodēšanas darbības. json_validate(virkne $json, int $dziļums = 512, int $flags = 0): bool
- Klasei Randomizer ir pievienotas jaunas metodes, kas nodrošina augsta līmeņa API pseidogadījuma skaitļu un secību ģenerēšanai: getBytesFromString noteikta izmēra virknes ģenerēšanai, nejaušā secībā izmantojot citā virknē esošās rakstzīmes; getFloat un nextFloat, lai ģenerētu nejaušu peldošā komata skaitli, kas ietilpst norādītajā diapazonā.
- Pievienota iespēja izgūt konstantes, izmantojot dinamisko klases sintaksi: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Iepriekš, lai izgūtu BAR konstanti, bija jāizsauc konstante(Foo::class . '::' . $name); // Tagad vienkārši norādiet Foo::{$name};
- Pievienota atsevišķu izņēmumu ģenerēšana (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError), ja rodas problēmas, veicot darbības ar datumiem un laiku.
- Uzlabota kļūdu apstrāde, kas rodas serializētu datu parsēšanas laikā funkcijā unserialize(). Problēmu gadījumā unserialize() tagad izdod E_WARNING, nevis E_NOTICE.
- Ir veiktas izmaiņas diapazona() funkcijā. Izņēmums tiek ģenerēts, mēģinot nodot objektus, resursus vai masīvus mainīgajos, kas nosaka diapazona robežas, kā arī norādot negatīvu vērtību parametrā $step vai nedefinētu vērtību jebkurā parametrā. Rakstzīmju sarakstu tagad var izvadīt, norādot virknes, nevis ciparus (piemēram, "range('5', 'z')").
- Mainīta īpašību darbība ar statiskām īpašībām, kas tagad ignorē no vecākklases mantotās statiskās īpašības.
- Pievienoti iestatījumi aizsardzībai pret skursteņa pārplūdi. Ini failam ir pievienotas direktīvas zend.max_allowed_stack_size un zend.reserved_stack_size, kas nosaka maksimālo atļauto un rezervēto steka izmēru. Programma avarēs, tuvojoties steka izsmelšanai, kad steka ir pilna vairāk nekā starpība starp zend.max_allowed_stack_size un zend.reserved_stack_size (izpilde tiks pārtraukta, pirms rodas segmentācijas kļūda). Pēc noklusējuma zend.max_allowed_stack_size vērtība ir iestatīta uz 0 (0 — izmērs tiek noteikts automātiski; lai atspējotu ierobežojumu, varat iestatīt to uz -1).
- Pievienotas jaunas POSIX funkcijas posix_sysconf(), posix_pathconf(), posix_fpathconf() un posix_eaccess().
- Ir pievienota funkcija mb_str_pad, kas ir virknes funkcijas str_pad() analogs, kas paredzēts darbam ar vairāku baitu kodējumu, piemēram, UTF-8.
- Ļauj izveidot aizvērumus no metodēm un nodot nosauktos argumentus šīm slēgšanām. $test = new Test(); $slēgšana = $test->magic(…); $slēgšana(a: 'sveiks', b: 'pasaule');
- Mainīta uzvedība, apstrādājot konstantu redzamību saskarnēs. interfeiss I { public const FOO = 'foo'; } C klases ievieš I { private const FOO = 'foo'; }
- Ir paplašinātas funkciju array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() un proc_get_status() iespējas.
- Iespēja nodot negatīvu $widths vērtību mb_strimwidth() ir novecojusi. Konstante NumberFormatter::TYPE_CURRENCY ir noņemta. Atbalsts funkcijas ldap_connect() izsaukšanai ar diviem parametriem $host un $port ir pārtraukts. Iestatījums opcache.consistency_checks ir noņemts.
Avots: opennet.ru