Byl představen první alfa-verze nové větve programovacího jazyka PHP 8.2. Datum vydání je naplánováno na 24. listopadu. Hlavní novinky, které jsou již k dispozici pro testování nebo se plánují do PHP 8.2:
- Byly přidány samostatné typy „false“ a „null“, které mohou být použity například pro vracení znaku úspěchu funkce s chybou nebo prázdné hodnoty. Dříve mohly být „false“ a „null“ použity pouze v kombinaci s jinými typy (například „string|false“), nyní mohou být použity samostatně: function alwaysFalse(): false { return false; }
- Byla přidána možnost označit třídu jako dostupnou pouze pro čtení. Vlastnosti v takových třídách mohou být nastaveny pouze jednou, poté nebudou k dispozici pro změnu. Dříve bylo možné označit jako pouze pro čtení jednotlivé vlastnosti třídy, nyní je možné tento režim zapnout najednou pro všechny vlastnosti třídy. Určení příznaku „readonly“ na úrovni třídy také blokuje dynamické přidávání vlastností do třídy. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = ‘wrong’; // Chyba: Nelze vytvořit dynamickou vlastnost Post::$unknown
- Byla deklarována jako zastaralá možnost dynamického vytváření vlastností v třídě (jako „post->unknown“ v uvedeném příkladu). V PHP 9.0 povede přístup k vlastnostem, které nebyly původně definovány v třídě, k chybě (ErrorException). Třídy, které poskytují metody __get a __set pro vytváření vlastností, nebo dynamické vlastnosti ve stdClass, budou i nadále fungovat bez změn, dojde však k ukončení podpory pro implicitní práci s neexistujícími vlastnostmi, aby se ochránil vývojář před skrytými chybami. Pro zachování funkcionality starého kódu byl navržen atribut „#[AllowDynamicProperties]“, který povoluje použití dynamických vlastností.
- Byla poskytnuta možnost filtrování citlivých parametrů ve sledovacích datech zásobníku zobrazovaných při chybě. Oříznutí určité informace může být vyžadováno, když jsou informace o vzniklých chybách automaticky zasílány do externích služeb, které sledují problémy a informují o nich vývojáře. Například je možné vyloučit ze sledování parametry zahrnující uživatelská jména, hesla a proměnné prostředí. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception(‘Error’); } test(‘foo’, ‘password’, ‘baz’); Fatal error: Uncaught Exception: Error in test.php:8 Stack trace: #0 test.php(11): test(‘foo’, Object(SensitiveParameterValue), ‘baz’) #1 {main} thrown in test.php on line 8
- Byla prohlášena za zastaralou možnost substituce hodnot proměnných do řetězců pomocí výrazů «${var}» a ${(var)}. Podpora běžně používaných substitucí «{$var}» a «$var» zůstává zachována. Například: «Hello {$world}»; OK «Hello $world»; OK «Hello ${world}»; Deprecated: Použití ${} v řetězcích je zastaralé
- Byly prohlášeny za zastaralé částečně podporované volatelné objekty (callable), které mohou být vyvolány pomocí «call_user_func($callable)», ale nepodporují volání ve formě «$callable()»: «self::method» «parent::method» «static::method» [«self», «method»] [«parent», «method»] [«static», «method»] [«Foo», «Bar::method»] [new Foo, «Bar::method»]
- Bylo implementováno nezávislé na locale převádění velikosti písmen. Funkce, jako jsou strtolower() a strtoupper(), nyní vždy převádějí velikost písmen v rozsahu ASCII, a to i při nastavení lokality na „C“.
Zdroj: opennet.ru
