PHP 8.6: očekávané vydání a navrhované RFC v současné době
Získáte aktuální a praktický přehled o tom, co bude PHP 8.6 pravděpodobně obsahovat. Na základě několika posledních hlavních verzí upřesníme nejpravděpodobnější termín vydání. Poté projdeme RFC, která jsou výslovně zaměřena na PHP 8.6 nebo jsou vytvářena pro příští verzi PHP 8.x. Vše je zde zaměřeno na každodenní kód PHP, který budete skutečně psát ve skriptech CLI a webových aplikacích.
Očekávané okno vydání PHP 8.6
Hlavní verze PHP se již několik let dodávají koncem listopadu. PHP 8.5 bylo dodáno 20. listopadu 2025 a PHP 8.4.0 koncem listopadu 2024. Pokud si projekt zachová stejnou kadenci, bude PHP 8.6 s největší pravděpodobností dodáno ve třetím listopadovém týdnu roku 2026. Rozumné očekávání je čtvrteční vydání (stejně jako nedávné hlavní verze), takže uvažujte o 19. listopadu 2026 nebo 26. listopadu 2026, přičemž přesné datum závisí na tom, kolik RC bude potřeba.
Schváleno nebo již implementováno pro příští verzi
Aplikace částečné funkce (v2)
Stav: Přijato
Tím se přidá syntaxe založená na zástupných symbolech, která umožňuje částečně použít argumenty pro libovolný volatelný objekt. Pokud zavoláte funkci a ponecháte jeden nebo více argumentů jako zástupné znaky, PHP vrátí hodnotu Closure který si pamatuje, co jste již zadali. Tuto uzávěrku pak můžete později zavolat s chybějícími hodnotami.
<?php function add(int $a, int $b, int $c): int{ return $a + $b + $c;} $add10AndX = add(10, ?, 5); // returns Closure: fn(int $b): int echo $add10AndX(3); // 18
Tím se vytvoří uzávěr, protože ? označí chybějící argument. $add10AndX je důležitá proměnná, která obsahuje volání, které můžete znovu použít. Pokud má callable striktní typy parametrů, uzávěr je zachová, takže se stále zobrazují správné typové chyby.
To se projeví také u kódu s velkým množstvím zpětných volání.
<?php $strings = ['hello world', 'hello php']; $replaceHello = str_replace('hello', 'hi', ?); $result = array_map($replaceHello, $strings); var_dump($result);
str_replace('hello', 'hi', ?) vrátí uzávěr, který očekává třetí argument. Tento uzávěr lze předat přímo do array_map(). Okrajový případ: pokud částečně použijete volání, které přebírá argumenty pomocí odkazu, závisí přesné chování na konečných pravidlech RFC, takže při použití odkazů ověřte podle RFC.
RFC: https://wiki.php.net/rfc/partial_function_application_v2
clamp()
Stav: Přijato
To navrhuje nativní clamp() funkce, která udržuje hodnotu uvnitř rozsahu min/max. Pokud je hodnota nižší než min, získáte min. Pokud je vyšší než max, získáte max.
<?php $percent = 140; echo clamp($percent, 0, 100); // 100
$percent je váš vstup. 0 a 100 jsou inkluzivní meze. Pokud omylem předáte min > max, clamp() se očekává, že vyhodí ValueError, takže se nespoléhejte na tiché opravy.
RFC: https://wiki.php.net/rfc/clamp_v2
RFC dosud nepřijaté pro PHP 8.6
Vše, co je uvedeno v této části, je zatím návrh nebo se o něm diskutuje, takže se podrobnosti mohou změnit nebo návrh může být zamítnut. Popisuji, co se jednotlivé RFC snaží přidat a kde by se to objevilo ve vašem kódu, pokud by se to prosadilo.
func_get_args_by_name()
Stav: Projednává se
Navrhuje novou funkci, která vrací argumenty aktuální funkce, ale ponechává jména parametrů jako klíče pole pro pojmenované argumenty. Na rozdíl od func_get_args(), neztratíte jména.
<?php function greet(string $name, int $age, ...$extra): array{ return func_get_args_by_name();} var_dump(greet(name: 'Alice', age: 30, 'x', 'y'));
Vrácené pole by mělo obsahovat klíče jako name a age pro pojmenované argumenty. Další poziční argumenty zůstávají číselnými klíči. Okrajový případ: pokud předáte parametr pozičně, pravděpodobně se objeví jako číselný klíč, takže nepředpokládejte, že je vše pojmenované.
RFC: https://wiki.php.net/rfc/func_get_args_by_name
Nulovatelné a nenulovatelné operátory obsazení
Stav: Projednává se
Tím se navrhují dvě nové formy obsazení:
(?type)který umožňujenullprojít jakonull, ale stále ověřuje a vynucuje nenulové hodnoty pomocí pravidel vynucování parametrů ve slabém režimu.(!type)která odmítánulla také odmítá hodnoty, které nelze čistě vynutit.
<?php $value = null; var_dump((?int) $value); // null try { var_dump((!int) $value);} catch (TypeError $e) { echo $e->getMessage(), "";}
(?int) je určen pro potrubí, kde null je významná absence. (!int) je určen pro místa, kde chcete místo tichého převodu explicitně zjistit selhání. Okrajový případ: Klíčovou součástí jsou přesná pravidla pro vynucení, která jsou založena na pravidlech pro slabé parametry režimu, nikoli na dnešním velmi povoleném obsazování.
RFC: https://wiki.php.net/rfc/nullable-not-nullable-cast-operator
Odstranění fuzzy skalárních obsazení
Stav: Projednává se
Cílem tohoto kroku je odstranit "fuzzy" obsazování, kdy PHP v současné době provádí ztrátové konverze, aniž by vás o tom informovalo. Klasickým příkladem je částečně číselný řetězec, kde PHP ponechá číselný prefix a zbytek zahodí.
<?php $raw = "123abc"; // Today this becomes 123.// Under this RFC, this kind of cast is expected to raise a deprecation in PHP 8.6.$value = (int) $raw; var_dump($value);
Pokud toto RFC projde, je praktická oprava jednoduchá: nejprve validovat a pak obsazovat.
<?php $raw = "123abc"; if (!ctype_digit($raw)) { throw new InvalidArgumentException('Expected digits only');} $value = (int) $raw;var_dump($value);
ctype_digit() je striktní: přijímá pouze řetězce složené z číslic. To znamená, že odmítá záporná čísla a bílé znaky, takže si vyberte validátor, který odpovídá vašim vstupním pravidlům.
RFC: https://wiki.php.net/rfc/deprecate-fuzzy-and-null-casts
Odebrání pro PHP 8.6
Stav: Návrh
Jedná se o souhrnné RFC, které shromažďuje depreciace navržené pro PHP 8.6. Je strukturován tak, aby se o jednotlivých depreciacích mohlo hlasovat samostatně. Mezi příklady, které jsou v současné době uvedeny, patří zrušení předávání objektů některým funkcím pole a zlib a zrušení funkce strcoll() a SORT_LOCALE_STRING.
RFC: https://wiki.php.net/rfc/deprecations_php_8_6
Přidání funkce values() do BackedEnum
Stav: Projednává se
To navrhuje values() metoda na BackedEnum vrátit všechny zálohované hodnoty jako indexované pole. Pokud jste napsali enumy a pak jste okamžitě potřebovali array_map(fn($c) => $c->value, Status::cases()), čímž se odstraní šablona.
<?php enum Status: string{ case Active = 'active'; case Inactive = 'inactive';} var_dump(Status::values());
Pokud výčet již definuje vlastní values() by měla fungovat i nadále. Pokud se spoléháte na konkrétní pořadí řazení, ověřte si, co zaručuje RFC (obvykle je to pořadí deklarace).
RFC: https://wiki.php.net/rfc/add_values_method_to_backed_enum
Stringable enums
Stav: Projednává se
Navrhuje se povolit __toString() na výčtech. To by umožnilo přímo echo případ výčtu s vlastním formátováním.
<?php enum Role: string{ case Admin = 'admin'; public function __toString(): string { return $this->value; }} echo Role::Admin;
To je záměrně úzké: jde o to, aby enumy definovaly __toString(), nikoli o přidávání stavu do enumů.
RFC: https://wiki.php.net/rfc/stringable-enums
Vylepšení zpracování chyb proudu
Stav: Projednává se
Navrhuje se, aby chyby proudu byly konzistentnější a programově použitelnější. RFC popisuje přidání strukturovaného ukládání chyb, volitelného chování založeného na výjimkách a konzistentních chybových kódů napříč wrappery. Pokud jste někdy museli žonglovat s varováními, obsluhami chyb a nekonzistentními zprávami z různých obalovačů proudu, je tento návrh zaměřen na tuto bolest.
RFC: https://wiki.php.net/rfc/stream_errors
Rozhraní API pro kódování dat
Stav: Projednává se
Navrhuje standardní kódovací a dekódovací rozhraní API pro běžná základní kódování. Motivací je pokrýt více variant, než je dnešních. base64_encode() a base64_decode(), včetně podrobností o rodině RFC 4648 a dalších populárních kódování.
RFC: https://wiki.php.net/rfc/data_encoding_api
Viditelnost v oboru názvů
Stav: Projednává se
Tím se navrhuje nová úroveň viditelnosti, zapsaná jako private(namespace), který umožňuje přístup ze stejného jmenného prostoru. Cílem je sdílet vnitřní rozhraní API mezi úzce příbuznými třídami, aniž by byly vystaveny jako public do celé aplikace.
RFC: https://wiki.php.net/rfc/namespace_visibility
PDO disconnect() a isConnected()
Stav: Projednává se
To navrhuje dvě metody na PDO:
PDO::disconnect()explicitně uzavřít základní připojení.PDO::isConnected()pro dotaz, zda je spojení právě navázáno.
Pokud se to podaří, získáte podporovaný způsob, jak přerušit spojení, aniž byste se museli spoléhat na unset($pdo) a načasování vybírání odpadu.
RFC: https://wiki.php.net/rfc/pdo_disconnect
Objektově orientované rozhraní API curl v2
Stav: Projednává se
Jazyk PHP má dnes handle curl jako objekty, ale stále se používají převážně prostřednictvím procedurálních funkcí. Toto RFC navrhuje skutečné objektově orientované API nad objekty curl s čistší strukturou a lepší typovou bezpečností.
RFC: https://wiki.php.net/rfc/curl_oop_v2
num_available_processors()
Stav: Projednává se
Navrhuje nativní funkci pro zjištění počtu dostupných procesorů. Je užitečná hlavně pro plánování paralelní práce, například pro výběr výchozího počtu pracovníků.
<?php $workers = num_available_processors() ?? 1; echo "Workers: {$workers}";
Na stránkách ?? 1 záložní řešení je důležité, protože RFC umožňuje vracet null v některých situacích. Nepředpokládejte, že vždy odpovídá limitům afinity procesoru, pokud to RFC výslovně nezaručuje.
RFC: https://wiki.php.net/rfc/num_available_processors
Upustit od 32bitových sestavení
Stav: Projednává se
Navrhuje se zastavení oficiálních 32bitových sestavení. Pokud nasazujete na velmi staré systémy, může to být zlomová změna, ale většina moderních hostingů a kontejnerů je již 64bitová.
RFC: https://wiki.php.net/rfc/drop_32bit_support
Podpora validace schématu JSON
Stav: Projednává se
Navrhuje se přidat do rozšíření JSON podporu schématu JSON. RFC popisuje objekty schématu (vytvořené z textu schématu) a validaci integrovanou se stávajícím zpracováním chyb JSON. Pokud se dnes validují užitečná zatížení API proti schématům pomocí knihoven, jednalo by se o standardní možnost.
RFC: https://wiki.php.net/rfc/json_schema_validation
pack()/unpack() modifikátory endianity pro celá čísla se znaménkem
Stav: Projednává se
Navrhuje se rozšířit pack() a unpack() formátování řetězců pro podporu modifikátorů endianity u formátů celých čísel se znaménkem. Cílem je vyhnout se ručnímu posunu bitů, když potřebujete podepsaná malá nebo velká endiánská celá čísla.
RFC: https://wiki.php.net/rfc/pack-unpack-endianness-signed-integers-support
Správci kontextu
Stav: V diskusi
To navrhuje using (...) { ... } zaručující vyčištění na konci bloku. Základní myšlenkou je "něco získat, spustit kód, vždy ho uvolnit", aniž by bylo nutné ručně psát try/finally na každém místě. Příklady RFC se zaměřují na práci se soubory a transakce.
RFC: https://wiki.php.net/rfc/context-managers
True Async
Stav: Projednává se
Jedná se o širší návrh na definici standardního asynchronního modelu a podpory na úrovni enginu, na který se mohou napojit rozšíření. Zahrnuje základní RFC a související RFC pro rozsah a API motoru. Je to ambiciózní a je to typ RFC, který může trvat několik cyklů vydání, pokud se vůbec podaří.
RFC: https://wiki.php.net/rfc/true_async
Rozhraní API True Async engine
Stav: Projednává se
Toto je doprovodné RFC, které se zaměřuje na rozhraní API na úrovni enginu pro připojitelné plánovače, reaktory a pooly vláken. Považujte jej za infrastrukturu, která umožňuje asynchronní implementace bez nutnosti pevného připojení PHP k jedné smyčce událostí.
RFC: https://wiki.php.net/rfc/true_async_engine_api
Skutečný asynchronní rozsah a strukturovaná souběžnost
Stav: Projednává se
To rozšiřuje návrh True Async o časové rozsahy životnosti pro koroutiny a koncepty strukturované souběžnosti. Klíčovou myšlenkou je svázání souběžné práce s oborem, takže zrušení a vyčištění je automatické, když obor skončí.
RFC: https://wiki.php.net/rfc/true_async_scope
Závěr
Nyní máte k dispozici reálné okno pro vydání PHP 8.6, které vychází z nedávného termínu koncem listopadu. Věnovali jsme se funkcím, které již byly přijaty nebo se implementují, včetně částečného použití funkcí a funkce clamp(). Seskupili jsme všechny další aktuálně navrhované RFC pro PHP 8.6, které jsou stále v návrhu nebo se o nich diskutuje, s krátkým popisem toho, co by změnily. Jak už to u hlasování bývá, jediným spolehlivým zdrojem pravdy je stav každého RFC, takže sledujte, které položky se přesunou do stavu Přijato nebo Implementováno.