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ā:

  • Klonējot klases, tagad ir iespējams atkārtoti inicializēt īpašības ar atribūtu "readonly". Tikai lasāmu īpašību pārrakstīšana ir atļauta tikai funkcijas "__clone" ietvaros: readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // atļauts, pat ja īpašība "createdAt" ir tikai lasāma. } }
  • Tagad ir pieejama iespēja izmantot konstantes ar tipa specifikāciju klasēs, īpašībās un uzskaitījumos: class Foo { const string BAR = 'baz'; }
  • Pievienots atbalsts atribūtam "#[Override]", kas ļauj izstrādātājam informēt interpretētāju, ka atzīmēta metode ignorē vecāku metodi. Ja ignorēšanas nav, interpretētājs ģenerēs kļūdu.
  • Ir mainīta negatīvu vērtību apstrāde kā masīva indeksiem. Piemēram, pievienojot elementu ar indeksu "-5" tukšam masīvam un pēc tam pievienojot vēl vienu elementu, otrais elements iepriekš tika saglabāts ar indeksu "0", bet, sākot ar PHP 8.3, tas tiks saglabāts ar indeksu "-4". $array = []; $array[-5] = 'a'; $array[] = 'b'; var_export($array); // Bija masīvs (-5 => 'a', 0 => 'b') // Kļuva par masīvu (-5 => 'a', -4 => 'b')
  • Pievienota iespēja veidot 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 atbilst JSON formātam, neveicot dekodēšanas darbības. json_validate(string $json, int $depth = 512, int $flags = 0): bool
  • Randomizer klasei ir pievienotas jaunas metodes, kas nodrošina augsta līmeņa API pseido-nejaušu skaitļu un secību ģenerēšanai: getBytesFromString noteikta izmēra virknes ģenerēšanai, kas nejauši atlasa rakstzīmes no citas virknes; un getFloat un nextFloat nejauša peldošā komata skaitļa ģenerēšanai noteiktā diapazonā.
  • Pievienota iespēja iegūt konstantes, izmantojot dinamisko klases sintaksi: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Iepriekš, lai iegūtu BAR konstanti, bija jāizsauc constant(Foo::class . '::' . $name); // Tagad tikai jānorāda Foo::{$name};
  • Pievienota atsevišķu izņēmumu ģenerēšana (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) problēmu gadījumā, veicot darbības ar datumiem un laikiem.
  • Uzlabota kļūdu apstrāde, kas rodas, parsējot serializētus datus funkcijā unserialize(). Ja rodas problēmas, unserialize() tagad atgriež kodu E_WARNING, nevis E_NOTICE.
  • Izmaiņas ir veiktas funkcijā range(). Tagad tiek izmests izņēmums, 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ā. Norādot virknes skaitļu vietā (piemēram, "range('5', 'z')").
  • Iezīmju ar statiskām īpašībām uzvedība ir mainīta, tāpēc tās tagad ignorē no vecākklases mantotās statiskās īpašības.
  • Pievienoti kaudzes pārpildes aizsardzības iestatījumi. INI failam ir pievienotas direktīvas zend.max_allowed_stack_size un zend.reserved_stack_size. Šīs direktīvas nosaka maksimāli pieļaujamos un rezervētos kaudzes izmērus. Programma pārtrauks darbību ar kļūdu, tuvojoties kaudzes izsīkumam, ja kaudze būs piepildīta vairāk nekā starpība starp zend.max_allowed_stack_size un zend.reserved_stack_size vērtībām ​​(izpilde tiks apturēta pirms segmentācijas kļūdas rašanās). Pēc noklusējuma zend.max_allowed_stack_size ir iestatīts uz 0 (0 nozīmē, ka izmērs tiek noteikts automātiski; var iestatīt -1, lai atspējotu ierobežojumu).
  • Pievienotas jaunas POSIX funkcijas posix_sysconf(), posix_pathconf(), posix_fpathconf() un posix_eaccess().
  • Pievienota funkcija mb_str_pad, kas ir str_pad() virknes funkcijas analogs un paredzēta darbam ar vairāku baitu kodējumiem, piemēram, UTF-8.
  • Ir atļauts veidot slēgumus no metodēm un nodot šiem slēgumiem nosauktus argumentus. $test = new Test(); $closure = $test->magic(…); $closure(a: 'hello', b: 'world');
  • Mainīta uzvedība, apstrādājot konstantu redzamību saskarnēs. interface I { public const FOO = 'foo'; } C klase implements I { private const FOO = 'foo'; }
  • Funkciju array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() un proc_get_status() iespējas ir paplašinātas.
  • Iespēja nodot negatīvu $widths vērtību funkcijai mb_strimwidth() vairs netiek atbalstīta. Konstante NumberFormatter::TYPE_CURRENCY ir noņemta. Atbalsts ldap_connect() izsaukšanai ar diviem parametriem — $host un $port — vairs netiek atbalstīts. Iestatījums opcache.consistency_checks ir noņemts.

Avots: opennet.ru

Pievieno komentāru