Izdanje programskog jezika PHP 8.3

Nakon godinu dana razvoja, predstavljeno je izdanje programskog jezika PHP 8.3. Nova grana uključuje niz novih značajki, kao i nekoliko promjena koje prekidaju kompatibilnost.

Ključne promjene u PHP-u 8.3:

  • Tijekom kloniranja klase, moguće je ponovno inicijalizirati svojstva s atributom "samo za čitanje". Nadjačavanje svojstava samo za čitanje dopušteno je samo unutar funkcije “__clone”: class samo za čitanje Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // dopušteno iako je svojstvo "createdAt" samo za čitanje. }}
  • Omogućena je mogućnost korištenja konstanti s indikacijom tipa u klasama, osobinama i enumeracijama: class Foo { const string BAR = 'baz'; }
  • Dodana je podrška za atribut "#[Override]", s kojim programer može obavijestiti tumača da označena metoda nadjačava neku nadređenu metodu. Ako nema nadjačavanja, tumač će prikazati pogrešku.
  • Promijenjeno rukovanje negativnim vrijednostima kao indeksom polja. Na primjer, prilikom dodavanja elementa s brojem “-5” u prazan niz i dodavanja drugog elementa, prethodno je drugi element bio spremljen s indeksom “0”, ali počevši od verzije PHP 8.3 bit će spremljen s indeksom “-4” . $niz = []; $niz[-5] = 'a'; $array[] = 'b'; var_export($array); // Bio je niz (-5 => 'a', 0 => 'b') // Postao niz (-5 => 'a', -4 => 'b')
  • Dodana je mogućnost stvaranja anonimnih klasa u načinu rada samo za čitanje: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Dodana funkcija json_validate() za brzu provjeru je li niz u JSON formatu bez izvođenja operacija dekodiranja. json_validate(string $json, int $depth = 512, int $flags = 0): bool
  • Nove metode dodane su klasi Randomizer, koja pruža API visoke razine za generiranje pseudo-slučajnih brojeva i sekvenci: getBytesFromString za generiranje niza zadane veličine, korištenjem nasumičnim redoslijedom znakova prisutnih u drugom nizu; getFloat i nextFloat za generiranje nasumičnog broja s pomičnim zarezom koji je unutar navedenog raspona.
  • Dodana mogućnost dohvaćanja konstanti korištenjem sintakse dinamičke klase: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Prethodno, da biste dohvatili BAR konstantu, morali ste pozvati constant(Foo::class . '::' . $name); // Sada samo navedite Foo::{$name};
  • Dodano generiranje pojedinačnih iznimaka (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) u slučaju problema koji nastaju u operacijama rada s datumima i vremenom.
  • Poboljšano rukovanje pogreškama koje se javljaju tijekom parsiranja serijaliziranih podataka u funkciji unserialize(). U slučaju problema, unserialize() sada izdaje E_WARNING umjesto E_NOTICE.
  • Izmijenjene su funkcije range(). Iznimka se generira kada se pokušavaju proslijediti objekti, resursi ili nizovi u varijablama koje definiraju granice raspona, kao i kada se navede negativna vrijednost u parametru $step ili nedefinirana vrijednost u bilo kojem parametru. Popis znakova sada se može ispisati kada se specificiraju nizovi umjesto brojeva (na primjer, "range('5', 'z')").
  • Promijenjeno je ponašanje osobina sa statičkim svojstvima, koja sada nadjačavaju statička svojstva naslijeđena od nadređene klase.
  • Dodane postavke za zaštitu od prekoračenja stoga. Direktive zend.max_allowed_stack_size i zend.reserved_stack_size dodane su ini datoteci, definirajući najveću dopuštenu i rezerviranu veličinu hrpe. Program će se srušiti kada se stog približi iscrpljenosti, kada je stog pun više od razlike između zend.max_allowed_stack_size i zend.reserved_stack_size (izvršenje će se zaustaviti prije nego što dođe do pogreške segmentacije). Prema zadanim postavkama vrijednost zend.max_allowed_stack_size postavljena je na 0 (0—veličina se određuje automatski; da biste onemogućili ograničenje, možete je postaviti na -1).
  • Dodane nove POSIX funkcije posix_sysconf(), posix_pathconf(), posix_fpathconf() i posix_eaccess().
  • Dodana je funkcija mb_str_pad, koja je analog string funkcije str_pad(), dizajnirana za rad s višebajtnim kodiranjem kao što je UTF-8.
  • Omogućuje stvaranje zatvaranja iz metoda i prosljeđivanje imenovanih argumenata tim zatvaranjima. $test = novi test(); $zatvaranje = $test->magija(…); $closure(a: 'zdravo', b: 'svijet');
  • Promijenjeno ponašanje pri rukovanju vidljivošću konstanti u sučeljima. sučelje I { public const FOO = 'foo'; } klasa C implementira I { private const FOO = 'foo'; }
  • Proširene su mogućnosti funkcija array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() i proc_get_status().
  • Mogućnost prosljeđivanja negativne $widths vrijednosti u mb_strimwidth() je zastarjela. Konstanta NumberFormatter::TYPE_CURRENCY je uklonjena. Podrška za pozivanje funkcije ldap_connect() s dva parametra $host i $port je ukinuta. Postavka opcache.consistency_checks je uklonjena.

Izvor: opennet.ru

Dodajte komentar