Pärast aasta arendust on välja antud programmeerimiskeele PHP 8.3 versioon. Uus haru sisaldab mitmeid uusi funktsioone ning mõned kokkusobivuse muutvad muudatused.
PHP 8.3 peamised muudatused:
- Klasside kloonimise ajal on võimalik uuesti initsialiseerida omadusi, millel on attribuut "readonly". readonly omaduste ülekirjutamine on lubatud ainult funktsioonis "__clone": readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // lubatud, hoolimata sellest, et omadus "createdAt" on ainult lugemisrežiimis. } }
- Konstandite tüübiga deklareerimine klassides, liidetes ja loendites on nüüd lubatud: class Foo { const string BAR = 'baz'; }
- Tutvustati atribuut «#[Override]», mille kaudu saab arendaja teavitada tõlgendajat, et märgitud meetod ületab mingit vanemat meetodit. Kui ületamist ei toimu, tagastab tõlgendaja vea.
- Muutus negatiivsete väärtuste töötlemine massiivi indeksitena. Näiteks, kui lisada tühjale massiivile element numbriga «-5» ja hiljem veel üks element, siis varem salvestati teine element indeksiga «0», kuid alates versioonist PHP 8.3 salvestatakse see indeksiga «-4». $array = []; $array[-5] = 'a'; $array[] = 'b'; var_export($array); // Oli array (-5 => 'a', 0 => 'b') // Sai array (-5 => 'a', -4 => 'b')
- Loa anonüümsete klasside loomine ainult lugemisrežiimis: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
- Lisatud funktsioon json_validate(), mis võimaldab kiiresti kontrollida, kas string vastab JSON formaadile ilma dekodeerimisoperatsioonide teostamiseta. json_validate(string $json, int $depth = 512, int $flags = 0): bool
- Klassile Randomizer, mis pakub kõrgetasemelist API-d pseudojuhuslike arvude ja järjestuste genereerimiseks, on lisatud uued meetodid: getBytesFromString, mis loob määratud suurusega stringi, kasutades juhuslikult märke, mis esinevad teises stringis; getFloat ja nextFloat, et genereerida juhuslik ujukomaarv, mis jääb määratud piiridesse.
- Lisatud konstandite väljavõtmise võimalus dünaamilise klassi süntaksiga: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Varem pidi konstandi BAR väljavõtmiseks kutsuma constant(Foo::class . '::' . $name); // Nüüd piisab, kui märkida Foo::{$name};
- Lisatud eraldi erandid (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError), mis tekivad kuupäevade ja ajaga seotud operatsioonide käigus probleeme tekkides.
- Parandatud vigu, mis tekivad serialiseeritud andmete töötlemisel funktsioonis unserialize(). Probleemide korral tagastab unserialize() nüüd koodi E_WARNING selle asemel, et E_NOTICE.
- Funktsiooni range() töötlemisel on tehtud muudatusi. Erakordne erandi genereerimine juhul, kui üritatakse edasi anda objekte, ressursse või massiive piiride muutujates, samuti negatiivse väärtuse esitlemine parameetris $step või määratlemata väärtuse loetlemine mis tahes parameetris. Sümbolite loendi väljastamine stringide esitamisel arvude asemel (nt "range('5', 'z')").
- Muutunud on käitumine liidete puhul, millel on staatilised omadused; nüüd ületavad need vanemate klasside staatilisi omadusi.
- Lisatud seaded, et kaitsta virna ülevoolu eest. ini-failile on lisatud direktiivid zend.max_allowed_stack_size ja zend.reserved_stack_size, mis määravad maksimaalsed lubatud ja reserveeritud virna suurused. Programm lõpetatakse veaga, kui virna kaugus läheneb täitmisele, kui virna täitmine ületab zend.max_allowed_stack_size ja zend.reserved_stack_size vahe (käitamine lõpetatakse, Vigastuse vältimiseks). Vaikimisi on zend.max_allowed_stack_size väärtus 0 (0 - suurus määratakse automaatselt, piirangute keelamiseks võib seada -1).
- Lisatud uued POSIX-funktsioonid posix_sysconf(), posix_pathconf(), posix_fpathconf() ja posix_eaccess().
- Üks uue funktsioonina lisatud mb_str_pad on sarnane stringifunktsioonile str_pad(), mis on kohandatud töötama mitme baitide kodeeringute, näiteks UTF-8ga.
- Lubatud on sulgude loomine meetoditest ja nimetatud argumentide edastamine sellistesse sulgudesse. $test = new Test(); $closure = $test->magic(...); $closure(a: 'hello', b: 'world');
- Muutunud on käitumine konstandite nähtavuse töötlemisel liidetes. interface I { public const FOO = 'foo'; } class C implements I { private const FOO = 'foo'; }
- Funktsioonide array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() ja proc_get_status() omadusi on laiendatud.
- Sissejuhatusse on kuulutatud aegunud võimalus edastada negatiivset väärtust $widths funktsioonis mb_strimwidth(). Eemaldatud on konstant NumberFormatter::TYPE_CURRENCY. Toetuse lõpetamine funktsiooni ldap_connect() kutsumiseks kahe parameetriga $host ja $port. Eemaldatud on seade opcache.consistency_checks.
Allikas: opennet.ru
