Datum vydání PHP 8.6, chystané funkce a stav RFC

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 hlav...

Poptat web

16. 12. 2025

Datum vydání PHP 8.6, chystané funkce a stav RFC

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žňuje null projít jako null, ale stále ověřuje a vynucuje nenulové hodnoty pomocí pravidel vynucování parametrů ve slabém režimu.
  • (!type) která odmítá null a 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.

Původní článek publikoval Nabil Hassen.