Vydání programovacího jazyka PHP 8.3

Po roce vývoje bylo představeno vydání programovacího jazyka PHP 8.3. Nová větev obsahuje řadu nových funkcí a také několik změn, které narušují kompatibilitu.

Klíčové změny v PHP 8.3:

  • Během klonování třídy je možné znovu inicializovat vlastnosti pomocí atributu „pouze pro čtení“. Přepsání vlastností pouze pro čtení je povoleno pouze uvnitř funkce „__clone“: třída pouze pro čtení Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // povoleno, i když je vlastnost "createdAt" pouze pro čtení. } }
  • Byla poskytnuta možnost používat konstanty s indikací typu ve třídách, vlastnostech a výčtech: class Foo { const string BAR = 'baz'; }
  • Přidána podpora pro atribut „#[Override]“, pomocí kterého může vývojář informovat interpreta, že označená metoda přepíše některou nadřazenou metodu. Pokud nedojde k žádnému přepsání, interpret zobrazí chybu.
  • Změněno zacházení se zápornými hodnotami jako index pole. Například při přidávání prvku s číslem „-5“ do prázdného pole a přidávání dalšího prvku byl dříve druhý prvek uložen s indexem „0“, ale od verze PHP 8.3 bude uložen s indexem „-4“ . $array = []; $array[-5] = 'a'; $array[] = 'b'; var_export($array); // Bylo pole (-5 => 'a', 0 => 'b') // Stalo se polem (-5 => 'a', -4 => 'b')
  • Přidána možnost vytvářet anonymní třídy v režimu pouze pro čtení: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Přidána funkce json_validate() pro rychlou kontrolu, zda je řetězec ve formátu JSON, bez provádění operací dekódování. json_validate(řetězec $json, int $hloubka = 512, int $flags = 0): bool
  • Do třídy Randomizer, která poskytuje vysokoúrovňové API pro generování pseudonáhodných čísel a sekvencí, byly přidány nové metody: getBytesFromString pro generování řetězce dané velikosti s použitím v náhodném pořadí znaků přítomných v jiném řetězci; getFloat a nextFloat pro vygenerování náhodného čísla s plovoucí desetinnou čárkou, které spadá do zadaného rozsahu.
  • Přidána možnost získávat konstanty pomocí dynamické syntaxe třídy: class Foo { const BAR = 'bar'; } $jméno = 'BAR'; // Dříve bylo pro načtení konstanty BAR nutné zavolat konstantní(Foo::class . '::' . $name); // Nyní stačí zadat Foo::{$name};
  • Přidáno generování jednotlivých výjimek (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) pro případ problémů vznikajících při operacích pracujících s daty a časem.
  • Vylepšené zpracování chyb, ke kterým dochází během analýzy serializovaných dat ve funkci unserialize(). V případě problémů nyní unserialize() vydává E_WARNING namísto E_NOTICE.
  • Ve funkci range() byly provedeny změny. Výjimka je generována při pokusu o předání objektů, zdrojů nebo polí v proměnných, které definují hranice rozsahu, stejně jako při zadání záporné hodnoty v parametru $step nebo nedefinované hodnoty v libovolném parametru. Poskytnutý výstup seznamu znaků při zadávání řetězců místo čísel (například "rozsah('5', 'z')").
  • Změnilo se chování vlastností se statickými vlastnostmi, které nyní přepisují statické vlastnosti zděděné z nadřazené třídy.
  • Přidáno nastavení ochrany proti přetečení zásobníku. Do souboru ini byly přidány direktivy zend.max_allowed_stack_size a zend.reserved_stack_size, které definují maximální povolenou a vyhrazenou velikost zásobníku. Program se zhroutí, když se blíží vyčerpání zásobníku, když je zásobník plný více, než je rozdíl mezi zend.max_allowed_stack_size a zend.reserved_stack_size (provádění se zastaví dříve, než dojde k chybě segmentace). Ve výchozím nastavení je hodnota zend.max_allowed_stack_size nastavena na 0 (0 – velikost je určena automaticky; chcete-li omezení deaktivovat, můžete ji nastavit na -1).
  • Přidány nové funkce POSIX posix_sysconf(), posix_pathconf(), posix_fpathconf() a posix_eaccess().
  • Byla přidána funkce mb_str_pad, což je obdoba funkce řetězce str_pad() navržená pro práci s vícebajtovými kódováními, jako je UTF-8.
  • Umožňuje vytvářet uzávěry z metod a předávat těmto uzávěrům pojmenované argumenty. $test = new Test(); $uzavření = $test->magic(…); $closure(a: 'ahoj', b: 'svět');
  • Změněno chování při manipulaci s viditelností konstant v rozhraních. interface I { public const FOO = 'foo'; } třída C implementuje I { private const FOO = 'foo'; }
  • Byly rozšířeny možnosti funkcí array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() a proc_get_status().
  • Možnost předat zápornou hodnotu $widths do mb_strimwidth() byla zastaralá. Konstanta NumberFormatter::TYPE_CURRENCY byla odstraněna. Podpora pro volání funkce ldap_connect() se dvěma parametry $host a $port byla ukončena. Nastavení opcache.consistency_checks bylo odstraněno.

Zdroj: opennet.ru

Přidat komentář