PHP 8.3 ohjelmointikielen julkaisu

Vuoden kehitystyön jälkeen esiteltiin PHP 8.3 -ohjelmointikielen julkaisu. Uusi haara sisältää joukon uusia ominaisuuksia sekä useita yhteensopivuuden rikkovia muutoksia.

Tärkeimmät muutokset PHP 8.3:ssa:

  • Luokkia kloonattaessa on nyt mahdollista alustaa ominaisuudet uudelleen "readonly"-attribuutilla. Vain luku -ominaisuuksien ohittaminen on sallittu vain "__clone"-funktion sisällä: readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // sallittu, vaikka "createdAt"-ominaisuus on vain luku -tilassa. } }
  • Mahdollisuus käyttää vakioita tyyppimäärittelyn kanssa luokissa, ominaisuuksissa ja luetteloissa on nyt saatavilla: class Foo { const string BAR = 'baz'; }
  • Lisätty tuki "#[Override]"-attribuutille, jonka avulla kehittäjä voi ilmoittaa tulkille, että merkitty metodi ohittaa päämetodin. Jos ohitusta ei ole, tulkki tuottaa virheen.
  • Negatiivisten arvojen käsittelyä taulukkoindekseinä on muutettu. Esimerkiksi kun lisätään tyhjään taulukkoon elementti, jonka indeksi on "-5", ja sitten lisätään toinen elementti, toinen elementti tallennettiin aiemmin indeksillä "0", mutta PHP 8.3:sta alkaen se tallennetaan indeksillä "-4". $array = []; $array[-5] = 'a'; $array[] = 'b'; var_export($array); // Oli taulukko (-5 => 'a', 0 => 'b') // Muuttui taulukoksi (-5 => 'a', -4 => 'b')
  • Lisätty mahdollisuus luoda anonyymejä luokkia vain luku -tilassa: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Lisätty json_validate()-funktio, jolla voidaan nopeasti tarkistaa, onko merkkijono JSON-muodon mukainen, ilman dekoodausoperaatioita. json_validate(string $json, int $depth = 512, int $flags = 0): bool
  • Randomizer-luokkaan on lisätty uusia metodeja, jotka tarjoavat korkean tason API:n näennäissatunnaisten lukujen ja sekvenssien luomiseen: getBytesFromString, tietyn kokoisen merkkijonon luomiseen, joka valitsee satunnaisesti merkkejä toisesta merkkijonosta; ja getFloat ja nextFloat, satunnaisen liukulukuluvun luomiseen tietyltä alueelta.
  • Lisätty mahdollisuus poimia vakioita dynaamisen luokkasyntaksin avulla: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Aiemmin BAR-vakion poimimiseksi piti kutsua constant(Foo::class . '::' . $name); // Nyt tarvitsee vain määrittää Foo::{$name};
  • Lisätty erillisten poikkeusten (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) generointi päivämäärien ja kellonaikojen kanssa tehtävissä toiminnoissa ilmenevien ongelmien varalta.
  • Parannettu sarjoitetun datan jäsennyksessä unserialize()-funktiossa ilmenevien virheiden käsittelyä. Jos ongelmia ilmenee, unserialize() palauttaa nyt E_WARNING-koodin E_NOTICE-koodin sijaan.
  • range()-funktioon on tehty muutoksia. Poikkeus heitetään nyt, kun yritetään välittää objekteja, resursseja tai taulukoita muuttujissa, jotka määrittelevät aluerajoja, sekä kun määritetään negatiivinen arvo $step-parametrissa tai määrittelemätön arvo missä tahansa parametrissa. Merkkijonoja määritettäessä tulostuu nyt merkkiluettelo numeroiden sijaan (esim. "range('5', 'z')").
  • Staattisia ominaisuuksia sisältävien ominaisuuksien toimintaa on muutettu siten, että ne korvaavat nyt pääluokasta perityillä staattisilla ominaisuuksilla.
  • Pinon ylivuotosuoja-asetukset on lisätty. INI-tiedostoon on lisätty direktiivit zend.max_allowed_stack_size ja zend.reserved_stack_size. Nämä direktiivit määrittelevät sallitut ja varatut pinon koot. Ohjelma päättyy virheeseen, kun pinon loppuminen lähestyy, kun pino on täynnä enemmän kuin zend.max_allowed_stack_size- ja zend.reserved_stack_size-arvojen välinen erotus (suoritus pysähtyy ennen segmentointivirhettä). Oletusarvoisesti zend.max_allowed_stack_size on asetettu arvoon 0 (0 tarkoittaa, että koko määritetään automaattisesti; arvoon -1 voidaan asettaa rajoituksen poistaminen käytöstä).
  • Lisätty uudet POSIX-funktiot posix_sysconf(), posix_pathconf(), posix_fpathconf() ja posix_eaccess().
  • mb_str_pad-funktio on lisätty. Se on analoginen str_pad()-merkkijonofunktiolle ja suunniteltu toimimaan monitavuisten koodausten, kuten UTF-8:n, kanssa.
  • Sulkeumia voi luoda metodeista ja niille voi välittää nimettyjä argumentteja. $test = new Test(); $closure = $test->magic(…); $closure(a: 'hello', b: 'world');
  • Muutettu toimintatapa vakioiden näkyvyyden käsittelyssä rajapinnoissa. interface I { public const FOO = 'foo'; } class C implements I { private const FOO = 'foo'; }
  • Funktioiden array_sum()-, array_product()-, posix_getrlimit()-, gc_status()-, class_alias()-, mysqli_poll()-, array_pad()- ja proc_get_status() ominaisuuksia on laajennettu.
  • Mahdollisuus välittää negatiivinen $widths-arvo mb_strimwidth()-funktiolle on vanhentunut. NumberFormatter::TYPE_CURRENCY-vakio on poistettu. Tuki ldap_connect()-funktion kutsumiselle kahdella parametrilla, $host ja $port, on lopetettu. opcache.consistency_checks-asetus on poistettu.

Lähde: opennet.ru

Osta luotettava isännöinti sivustoille, joissa on DDoS-suojaus, VPS VDS -palvelimet 🔥 Osta luotettavaa verkkosivustojen hostingia DDoS-suojauksella, VPS VDS -palvelimilla | ProHoster