Izdaja programskega jezika PHP 8.3

Po letu dni razvoja je bila predstavljena izdaja programskega jezika PHP 8.3. Nova veja vključuje vrsto novih funkcij, pa tudi več sprememb, ki motijo ​​združljivost.

Ključne spremembe v PHP 8.3:

  • Med kloniranjem razreda je mogoče znova inicializirati lastnosti z atributom »samo za branje«. Preglasitev lastnosti samo za branje je dovoljena samo znotraj funkcije “__clone”: readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // dovoljeno, čeprav je lastnost "createdAt" samo za branje. }}
  • Zagotovljena je bila možnost uporabe konstant z navedbo tipa v razredih, lastnostih in oštevanjih: class Foo { const string BAR = 'baz'; }
  • Dodana podpora za atribut “#[Override]”, s katerim lahko razvijalec obvesti tolmača, da označena metoda preglasi neko nadrejeno metodo. Če preglasitve ni, bo tolmač prikazal napako.
  • Spremenjeno ravnanje z negativnimi vrednostmi kot matričnim indeksom. Na primer, pri dodajanju elementa s številko »-5« v prazno polje in dodajanju drugega elementa je bil prej drugi element shranjen z indeksom »0«, od različice PHP 8.3 dalje pa bo shranjen z indeksom »-4« . $matrika = []; $matrika[-5] = 'a'; $matrika[] = 'b'; var_export($array); // Je bil niz (-5 => 'a', 0 => 'b') // Postal je niz (-5 => 'a', -4 => 'b')
  • Dodana možnost ustvarjanja anonimnih razredov v načinu samo za branje: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Dodana funkcija json_validate() za hitro preverjanje, ali je niz v formatu JSON brez izvajanja operacij dekodiranja. json_validate(niz $json, int $depth = 512, int $flags = 0): bool
  • Nove metode so bile dodane razredu Randomizer, ki zagotavlja API na visoki ravni za generiranje psevdonaključnih števil in zaporedij: getBytesFromString za generiranje niza dane velikosti z uporabo znakov v drugem nizu v naključnem vrstnem redu; getFloat in nextFloat za generiranje naključnega števila s plavajočo vejico, ki spada v določen obseg.
  • Dodana možnost pridobivanja konstant z dinamično sintakso razreda: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Prej ste morali za pridobitev konstante BAR poklicati constant(Foo::class . '::' . $name); // Zdaj samo določite Foo::{$name};
  • Dodano generiranje posameznih izjem (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) v primeru težav, ki nastanejo pri operacijah, ki delajo z datumi in uro.
  • Izboljšano obravnavanje napak, ki se pojavijo med razčlenjevanjem serializiranih podatkov v funkciji unserialize(). V primeru težav unserialize() zdaj izda E_WARNING namesto E_NOTICE.
  • Spremenjene so bile funkcije range(). Izjema se ustvari pri poskusu posredovanja predmetov, virov ali nizov v spremenljivkah, ki določajo meje obsega, kot tudi pri podajanju negativne vrednosti v parametru $step ali nedefinirane vrednosti v katerem koli parametru. Seznam znakov je zdaj mogoče izpisati, ko podajate nize namesto številk (na primer »range('5', 'z')«).
  • Spremenjeno vedenje lastnosti s statičnimi lastnostmi, ki zdaj preglasijo statične lastnosti, podedovane iz nadrejenega razreda.
  • Dodane nastavitve za zaščito pred prelivanjem sklada. Datoteki ini sta bili dodani direktivi zend.max_allowed_stack_size in zend.reserved_stack_size, ki določata največjo dovoljeno in rezervirano velikost sklada. Program se bo zrušil, ko se približuje izčrpanosti sklada, ko je sklad poln več, kot je razlika med zend.max_allowed_stack_size in zend.reserved_stack_size (izvajanje se bo ustavilo, preden pride do napake segmentacije). Privzeto je vrednost zend.max_allowed_stack_size nastavljena na 0 (0—velikost se določi samodejno; če želite onemogočiti omejitev, jo lahko nastavite na -1).
  • Dodane nove funkcije POSIX posix_sysconf(), posix_pathconf(), posix_fpathconf() in posix_eaccess().
  • Dodana je bila funkcija mb_str_pad, ki je analog nizovne funkcije str_pad(), zasnovane za delo z večbajtnimi kodiranji, kot je UTF-8.
  • Omogoča ustvarjanje zapiranj iz metod in posredovanje imenovanih argumentov tem zapiralom. $test = nov test(); $zapiranje = $test->magic(…); $closure(a: 'zdravo', b: 'svet');
  • Spremenjeno vedenje pri obravnavanju vidnosti konstant v vmesnikih. vmesnik I { public const FOO = 'foo'; } razred C izvaja I { private const FOO = 'foo'; }
  • Zmogljivosti funkcij array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() in proc_get_status() so bile razširjene.
  • Možnost posredovanja negativne vrednosti $widths v mb_strimwidth() je bila opuščena. Konstanta NumberFormatter::TYPE_CURRENCY je bila odstranjena. Podpora za klicanje funkcije ldap_connect() z dvema parametroma $host in $port je bila ukinjena. Nastavitev opcache.consistency_checks je bila odstranjena.

Vir: opennet.ru

Dodaj komentar