Vydání programovacího jazyka PHP 8.4

Po roce vývoje bylo představeno vydání programovacího jazyka PHP 8.4. 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.4:

  • Je navržena nová implementace JIT kompilátoru, postaveného na základě IR Framework. Klíčový rozdíl je v tom, že starý JIT přímo generoval strojové instrukce založené na bajtkódu a používající různé backendy pro architektury x86_64 a AArch64, zatímco nový JIT používá jediný backend pro všechny architektury a generuje mezilehlou reprezentaci (IR), která je pak dále optimalizované a převedené na strojové instrukce pro požadovanou cílovou platformu.
  • Přidána podpora pro připojení háčků vlastností, která umožňuje přidat další logiku, která se spouští při změně nebo přístupu k vlastnostem objektu, implementovaná bez zachycení operací čtení a zápisu pomocí běžných funkcí __get a __set a bez vytváření dalších metod vazby. Použití vlastností handlerů umožňuje výrazně snížit množství kódu a zjednodušit redefinici chování při práci s vlastnostmi, a to díky navázání vlastního handleru na každou vlastnost. class User { public string $name { set { if (strlen($value) === 0) { throw new ValueError("Jméno musí být neprázdné"); } $this->name = $hodnota; } } public function __construct(řetězec $jméno) { $toto->jméno = $jméno; } }
  • Je povoleno uvádět odkazy na metody v „nové“ konstrukci bez oddělovacích závorek, tzn. místo „$name = (new MyClass())->method()“ nyní můžete zadat „$name = new MyClass()->method()“.
  • Přidána možnost asymetrického ovládání viditelnosti vlastností objektu (public, private, protected), zvlášť pro operace zápisu (set) a čtení (získání). Například: class PhpVersion { public private(set) string $version = '8.4'; } $phpVersion = new PhpVersion(); var_dump($phpVersion->verze); // string(3) "8.4" $phpVersion->version = 'PHP 8.3'; // chyba
  • Poskytována standardní podpora pro „líné“ objekty, které jsou inicializovány při prvním použití.
  • Místo obecného parametru "opcache.jit_buffer_size" jsou navrženy parametry "opcache.jit" a "opcache.jit_buffer_size" pro ovládání JIT kompilátoru a konfiguraci velikosti JIT bufferu. Chcete-li zakázat JIT, můžete nyní zadat "opcache.jit=disable" místo "opcache.jit_buffer_size=0". Byly provedeny změny za účelem snížení spotřeby paměti a zlepšení výkonu JIT v některých situacích.
  • Přidán atribut „#[\Deprecated]“ pro označení zastaralých funkcí, tříd a metod. #[\Deprecated("použij místo toho newFunction()", since: "1.1")] function oldFunction() { // ... }
  • Byla implementována třída \Dom\HTMLDocument, která podporuje správnou analýzu značek HTML5.
  • Přidána funkce request_parse_body() pro analýzu požadavků HTTP s typem obsahu multipart/form-data (RFC1867).
  • Přidány funkce array_find(), array_find_key(), array_any() a array_all(). Funkce array_find() a array_find_key() vracejí první prvek nebo klíč v poli, pro který fungovala kontrola zadaná prostřednictvím uživatelem zadané funkce zpětného volání. Funkce array_any() a array_all() zase vrátí jakýkoli odpovídající prvek a všechny odpovídající prvky. Chcete-li například zobrazit první prvek, jehož pole názvu je větší než 5 znaků, můžete zadat: $firstMatch = array_find( $posts, function (Post $post) { return strlen($post->title) > 5; } ) ;
  • Přidány metody DateTime::getMicrosecond() a DateTimeImmutable::setMicrosecond($microsecond) pro získání a nastavení času s přesností na mikrosekundy a také metoda DateTime::createFromTimestamp().
  • PDO (PHP Data Objects), abstraktní rozhraní pro práci s databázemi, přidalo možnost vytvářet SQL analyzátory a podtřídy specifické pro určité ovladače DBMS. Byly přidány nové podtřídy Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc a Pdo\Sqlite.
  • Přidány nové funkce mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), mb_lcfirst(), bcceil(), bcdivmod(), bcfloor() a bcround(), pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_get) , pcntl_setns(), pcntl_waitid(), http_get_last_response_headers(), http_clear_last_response_headers(), fpow()
  • Operace exit a die lze nyní volat jako plnohodnotné funkce, které lze předat jako argument jiným funkcím. Dříve byla funkčnost funkcí exit() a die() velmi omezená, protože to byly obaly klíčových slov exit a die.
  • Byly přidány změny, které znesnadňují zneužití zranitelnosti přetečení vyrovnávací paměti a také zvyšují randomizaci názvů souborů vytvořených pomocí funkce tempnam().
  • Zastaralé chování, kdy bylo parametrům funkcí s výchozí hodnotou null automaticky povoleno přiřazovat hodnoty null. Aby tyto parametry přijímaly hodnoty null, je nyní vyžadováno explicitní označení předpony „?“. Například místo „function save(Book $book = null) {}“ byste měli zadat „function save(?Book $book = null) {}“.
  • Konstanty E_STRICT, MYSQLI_REFRESH_*, funkce mysqli_ping(), mysqli_kill(), mysqli_refresh(), metody mysqli::ping(), mysqli::kill(), mysqli::refresh(), schopnost používat „_ ” jako název třídy, některé vlastnosti DOMDocument a DOMEntity. Předefinování konstant třídy GMP je zakázáno, pro které je nyní nastaveno klíčové slovo „final“.

Dále můžeme zaznamenat vydání statického analyzátoru PHPStan 2.0, který vám umožňuje najít chyby v kódu PHP bez jeho spouštění a pomocí unit testů. Analyzátor poskytuje 10 úrovní pokrývajících oblasti, jako je identifikace nedefinovaných proměnných, neznámých tříd, funkcí a metod; kontrola typů argumentů a návratových hodnot; správné používání některých typů; Definice nikdy nevolaného kódu. Kód projektu je napsán v PHP a distribuován pod licencí MIT.

Zdroj: opennet.ru

Kupte si spolehlivý hosting pro stránky s DDoS ochranou, VPS VDS servery 🔥 Kupte si spolehlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster