PHP 8.3 programmēšanas valodas izlaidums

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

Pievieno komentāru