Vydanie programovacieho jazyka PHP 8.3

Po roku vývoja bolo predstavené vydanie programovacieho jazyka PHP 8.3. Nová pobočka obsahuje sériu nových funkcií, ako aj niekoľko zmien, ktoré narúšajú kompatibilitu.

Kľúčové zmeny v PHP 8.3:

  • Počas klonovania triedy je možné znova inicializovať vlastnosti s atribútom „len na čítanie“. Prepísanie vlastností len na čítanie je povolené iba vo funkcii „__clone“: trieda len na čítanie Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // povolené, aj keď vlastnosť "createdAt" je len na čítanie. } }
  • Bola poskytnutá možnosť používať konštanty s označením typu v triedach, črtách a enumeráciách: class Foo { const string BAR = 'baz'; }
  • Pridaná podpora pre atribút „#[Override]“, pomocou ktorého môže vývojár informovať tlmočníka, že označená metóda prepíše niektorú nadradenú metódu. Ak neexistuje žiadne prepísanie, tlmočník zobrazí chybu.
  • Zmenené spracovanie záporných hodnôt ako index poľa. Napríklad pri pridávaní prvku s číslom „-5“ do prázdneho poľa a pridávaní ďalšieho prvku bol predtým druhý prvok uložený s indexom „0“, ale od verzie PHP 8.3 bude uložený s indexom „-4“ . $pole = []; $array[-5] = 'a'; $array[] = 'b'; var_export($pole); // Bolo pole (-5 => 'a', 0 => 'b') // Stalo sa poľom (-5 => 'a', -4 => 'b')
  • Pridaná možnosť vytvárať anonymné triedy v režime len na čítanie: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Pridaná funkcia json_validate() na rýchlu kontrolu, či je reťazec vo formáte JSON bez vykonania operácií dekódovania. json_validate(reťazec $json, int $hĺbka = 512, int $príznaky = 0): bool
  • Do triedy Randomizer, ktorá poskytuje vysokoúrovňové API na generovanie pseudonáhodných čísel a sekvencií, boli pridané nové metódy: getBytesFromString na generovanie reťazca danej veľkosti s použitím znakov prítomných v inom reťazci v náhodnom poradí; getFloat a nextFloat na vygenerovanie náhodného čísla s pohyblivou rádovou čiarkou, ktoré spadá do určeného rozsahu.
  • Pridaná možnosť získať konštanty pomocou dynamickej syntaxe triedy: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Predtým ste na získanie konštanty BAR museli zavolať konštantu (Foo::class . '::' . $name); // Teraz stačí zadať Foo::{$name};
  • Pridané generovanie individuálnych výnimiek (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) v prípade problémov vznikajúcich pri operáciách pracujúcich s dátumami a časom.
  • Vylepšené spracovanie chýb, ktoré sa vyskytujú počas analýzy serializovaných údajov vo funkcii unserialize(). V prípade problémov unserialize() teraz vydáva E_WARNING namiesto E_NOTICE.
  • Boli vykonané zmeny vo funkcii range(). Výnimka sa vygeneruje pri pokuse o odovzdanie objektov, zdrojov alebo polí v premenných, ktoré definujú hranice rozsahu, ako aj pri zadaní zápornej hodnoty v parametri $step alebo nedefinovanej hodnoty v ľubovoľnom parametri. Pri zadávaní reťazcov namiesto čísel je teraz možné zobraziť zoznam znakov (napríklad „rozsah('5', 'z')“).
  • Zmenilo sa správanie vlastností so statickými vlastnosťami, ktoré teraz prepisujú statické vlastnosti zdedené z nadradenej triedy.
  • Pridané nastavenia ochrany proti pretečeniu zásobníka. Do súboru ini boli pridané direktívy zend.max_allowed_stack_size a zend.reserved_stack_size, ktoré definujú maximálnu povolenú a rezervovanú veľkosť zásobníka. Program spadne, keď sa blíži vyčerpanie zásobníka, keď je zásobník plný viac, ako je rozdiel medzi zend.max_allowed_stack_size a zend.reserved_stack_size (vykonanie sa zastaví skôr, ako dôjde k chybe segmentácie). V predvolenom nastavení je hodnota zend.max_allowed_stack_size nastavená na 0 (0 – veľkosť je určená automaticky; ak chcete obmedzenie vypnúť, môžete ju nastaviť na -1).
  • Pridané nové funkcie POSIX posix_sysconf(), posix_pathconf(), posix_fpathconf() a posix_eaccess().
  • Bola pridaná funkcia mb_str_pad, ktorá je analógom funkcie reťazca str_pad() navrhnutej na prácu s viacbajtovými kódovaniami, ako je UTF-8.
  • Umožňuje vám vytvárať uzávery z metód a odovzdávať týmto uzáverom pomenované argumenty. $test = new Test(); $uzavretie = $test->magic(…); $closure(a: 'ahoj', b: 'svet');
  • Zmenené správanie pri manipulácii s viditeľnosťou konštánt v rozhraniach. interface I { public const FOO = 'foo'; } trieda C implementuje I { private const FOO = 'foo'; }
  • Rozšírili sa možnosti funkcií array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() a proc_get_status().
  • Možnosť odovzdať zápornú hodnotu $widths do mb_strimwidth() bola zastaraná. Konštanta NumberFormatter::TYPE_CURRENCY bola odstránená. Podpora volania funkcie ldap_connect() s dvoma parametrami $host a $port bola ukončená. Nastavenie opcache.consistency_checks bolo odstránené.

Zdroj: opennet.ru

Pridať komentár