Vydání programovacího jazyka PHP 8.2

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

Klíčová vylepšení v PHP 8.2:

  • Přidána možnost označit třídu jako pouze pro čtení. Vlastnosti v takových třídách lze nastavit pouze jednou, poté již nebudou dostupné pro změnu. Dříve mohly být jednotlivé vlastnosti třídy označeny pouze pro čtení, ale nyní můžete tento režim zapnout pro všechny vlastnosti třídy najednou. Zadání příznaku „pouze pro čtení“ na úrovni třídy také blokuje dynamické přidávání vlastností do třídy. třída pouze pro čtení Příspěvek { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'špatně'; // Chyba: Nelze vytvořit dynamickou vlastnost Post::$unknown
  • Přidány samostatné typy „true“, „false“ a „null“, které mohou mít pouze jednu platnou hodnotu a používají se například k vrácení funkce s příznakem ukončení chyby nebo prázdnou hodnotou. Dříve bylo možné „true“, „false“ a „null“ použít pouze ve spojení s jinými typy (například „string|false“), ale nyní je lze použít samostatně: function alwaysFalse(): false { return false ; }
  • Poskytuje možnost filtrovat citlivá nastavení ve výstupu trasování zásobníku v době chyby. Vyjmutí určitých informací může být vyžadováno, když jsou informace o chybách, které se vyskytnou, automaticky odesílány do služeb třetích stran, které sledují problémy a informují o nich vývojáře. Z trasování můžete například vyloučit parametry, které zahrnují uživatelská jména, hesla a proměnné prostředí. function test( $foo, #[\SensitiveParameter] $heslo, $baz ) { throw new Exception('Error'); } test('foo', 'heslo', 'baz'); Závažná chyba: Nezachyceno Výjimka: Chyba v test.php:8 Trasování zásobníku: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} vyvoláno v test.php online 8
  • Povoleno definovat konstanty ve vlastnostech (vlastnost, mechanismus pro opětovné použití kódu). Ke konstantám definovaným ve vlastnosti lze přistupovat prostřednictvím třídy, která vlastnost používá (nikoli však prostřednictvím názvu vlastnosti). vlastnost Foo { public const KONSTANTA = 1; public function bar(): int { return self::CONSTANT; // Závažná chyba } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Přidána možnost specifikovat typy v disjunktivní normální formě (DNF, Disjunktivní normální forma), což umožňuje kombinovat sjednocení typů (kolekce dvou nebo více typů) a průnik typů (typy, jejichž hodnoty spadají pod několik typy současně). class Foo { public function bar((A&B)|null $entita) { if ($entita === null) { return null; } return $entita; } }
  • Bylo navrženo nové rozšíření „Random“ s funkcemi a třídami pro generování pseudonáhodných čísel a sekvencí. Modul poskytuje objektově orientované rozhraní, umožňuje vybrat různé motory pro generování pseudonáhodných čísel, včetně těch vhodných pro použití v kryptografii, a poskytuje pomocné funkce, například pro náhodné míchání polí a řetězců, výběr náhodných klíčů polí, současné použití několika generátorů s vlastním nezávislým stavem. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Implementována konverze případu nezávislá na národním prostředí. Funkce jako strtolower() a strtoupper() nyní vždy převádějí velká a malá písmena znaků v rozsahu ASCII, jako při nastavení národního prostředí na "C".
  • Přidány nové funkce: mysqli_execute_query, curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Přidány nové metody: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Schopnost dynamicky vytvářet vlastnosti ve třídě byla zastaralá. V PHP 9.0 bude mít přístup k vlastnostem, které nejsou původně definovány ve třídě, k chybě (ErrorException). Třídy, které poskytují metody __get a __set pro vytváření vlastností, nebo dynamické vlastnosti v stdClass budou nadále fungovat beze změn, bude podporována pouze implicitní práce s neexistujícími vlastnostmi, aby byl vývojář chráněn před skrytými chybami. Pro zachování práce starého kódu je navržen atribut „#[AllowDynamicProperties]“, který umožňuje použití dynamických vlastností.
  • Schopnost nahrazovat hodnoty proměnných do řetězců pomocí výrazů "${var}" a ${(var)}" byla zastaralá. Podpora běžně používaných substitucí "{$var}" a "$var" byla zachována. Například: "Ahoj {$world}"; OK "Ahoj $světe"; OK "Ahoj ${world}"; Zastaralé: Použití ${} v řetězcích je zastaralé
  • Částečně podporované callables, které lze volat přes "call_user_func($callable)" byly zastaralé, ale nepodporují volání ve tvaru "$callable()": "self::method" "parent::method" "static :: metoda" ["vlastní", "metoda"] ["rodič", "metoda"] ["statická", "metoda"] ["Foo", "Bar::method"] [nové Foo, "Bar: :metoda" "]
  • Do nastavení byla přidána direktiva error_log_mode, která vám umožňuje určit režim přístupu k protokolu chyb.

Zdroj: opennet.ru

Přidat komentář