PHP 8.3 programmeerimiskeele väljalase

Pärast aastast arendustööd esitleti PHP 8.3 programmeerimiskeele väljalaset. Uus haru sisaldab mitmeid uusi funktsioone, aga ka mitmeid muudatusi, mis rikuvad ühilduvust.

Peamised muudatused PHP 8.3-s:

  • Klassi kloonimise ajal on võimalik atribuudid "readonly" atribuudiga uuesti lähtestada. Kirjutuskaitstud atribuutide alistamine on lubatud ainult funktsiooni “__clone” sees: kirjutuskaitstud klass Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // lubatud, kuigi atribuut "createdAt" on kirjutuskaitstud. } }
  • Võimalus kasutada klassides, tunnustes ja loendites tüübinäitamisega konstante: class Foo { const string BAR = 'baz'; }
  • Lisatud on atribuudi “#[Override]” tugi, millega arendaja saab tõlgi teavitada, et märgitud meetod alistab mõne ülemmeetodi. Kui alistamine puudub, kuvab tõlk veateate.
  • Muudetud negatiivsete väärtuste käsitlemist massiiviindeksina. Näiteks lisades tühja massiivi numbriga “-5” elemendi ja lisades veel ühe elemendi, salvestati varem teine ​​element indeksiga “0”, kuid alates versioonist PHP 8.3 salvestatakse see indeksiga “-4” . $massiivi = []; $massiiv[-5] = 'a'; $massiiv[] = 'b'; var_export($massiiv); // Oli massiiv (-5 => 'a', 0 => 'b') // Muutus massiiviks (-5 => 'a', -4 => 'b')
  • Lisatud on võimalus luua kirjutuskaitstud režiimis anonüümseid klasse: $class = new kirjutuskaitstud klass { public function __construct( public string $foo = 'bar', ) {} };
  • Lisatud on funktsioon json_validate(), et kiiresti kontrollida, kas string on JSON-vormingus, ilma dekodeerimistoiminguid tegemata. json_validate(string $json, int $sügavus = 512, int $lipud = 0): bool
  • Uued meetodid on lisatud klassi Randomizer, mis pakub kõrgetasemelist API-d pseudojuhuslike arvude ja jadade genereerimiseks: getBytesFromString etteantud suurusega stringi genereerimiseks, kasutades juhuslikus järjekorras teises stringis olevaid märke; getFloat ja nextFloat, et genereerida juhuslik ujukomaarv, mis jääb määratud vahemikku.
  • Lisatud on võimalus hankida konstante dünaamilise klassi süntaksi abil: class Foo { const BAR = 'bar'; } $nimi = 'BAAR'; // Varem tuli BAR-konstandi leidmiseks kutsuda konstant(Foo::class . '::' . $nimi); // Nüüd lihtsalt määrake Foo::{$name};
  • Lisatud üksikute erandite genereerimine (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) kuupäevade ja kellaaegadega töötamisel tekkivate probleemide korral.
  • Funktsiooni unserialize() jadaandmete sõelumisel tekkivate vigade täiustatud käsitlemine. Probleemide korral väljastab unserialize() nüüd E_NOTICE asemel E_WARNING.
  • Funktsioonis range() on tehtud muudatusi. Erand luuakse siis, kui üritatakse edastada objekte, ressursse või massiive muutujates, mis määravad vahemiku piire, samuti negatiivse väärtuse määramisel parameetris $step või määramata väärtuse mis tahes parameetris. Esitatakse märkide loendi väljund, kui määrate numbrite asemel stringe (nt "range('5', 'z')").
  • Muutis staatiliste omadustega tunnuste käitumist, mis alistavad nüüd põhiklassist päritud staatilised omadused.
  • Lisatud sätted virna ülevoolukaitseks. Ini-faili on lisatud direktiivid zend.max_allowed_stack_size ja zend.reserved_stack_size, mis määratlevad maksimaalse lubatud ja reserveeritud virna suuruse. Programm jookseb kokku, kui pinu ammendub, kui virn on täis rohkem kui väärtuste zend.max_allowed_stack_size ja zend.reserved_stack_size vahe (käitumine peatub enne segmenteerimisvea ilmnemist). Vaikimisi on zend.max_allowed_stack_size väärtuseks seatud 0 (0 – suurus määratakse automaatselt; piirangu keelamiseks saate selle väärtuseks -1).
  • Lisatud on uued POSIX-i funktsioonid posix_sysconf(), posix_pathconf(), posix_fpathconf() ja posix_eaccess().
  • Lisatud on funktsioon mb_str_pad, mis on stringifunktsiooni str_pad() analoog, mis on loodud töötama mitmebaidise kodeeringuga nagu UTF-8.
  • Võimaldab luua meetoditest sulgemisi ja edastada nendele sulgemistele nimega argumente. $test = new Test(); $sulgemine = $test->magic(…); $closure(a: 'tere', b: 'maailm');
  • Muutunud käitumine liideste konstantide nähtavuse käsitlemisel. liides I { public const FOO = 'foo'; } klass C rakendab I { private const FOO = 'foo'; }
  • Laiendatud on funktsioonide array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() ja proc_get_status() võimalusi.
  • Võimalus edastada negatiivset $widths väärtust funktsioonile mb_strimwidth() on aegunud. Konstant NumberFormatter::TYPE_CURRENCY on eemaldatud. Funktsiooni ldap_connect() kutsumise tugi kahe parameetriga $host ja $port on lõpetatud. Säte opcache.consistency_checks on eemaldatud.

Allikas: opennet.ru

Lisa kommentaar