Po roce vývoje prezentovány vydání programovacího jazyka PHP 7.4. Nová větev obsahuje řadu nových funkcí a také několik změn, které narušují kompatibilitu.
Typované vlastnosti - vlastnosti třídy mohou nyní zahrnovat deklarace typu, například:
uživatel třídy {
public int $id;
veřejný řetězec $jméno;
}
Zkráceno syntaxe pro definování funkcí „fn(seznam_parametrů) => expr“ s vazbou rozsahu podle hodnoty. Například „fn($x) => $x + $y“ je analogické k „$fn2 = funkce ($x) použití ($y) {return $x + $y;}“);
Operátor přiřazení těsnopisu "??=", které lze použít k definování výchozí hodnoty ("a ??= b" je podobné jako "a = a ?? b", pokud je definováno "a", jeho hodnota je uložena, a pokud není definována je přiřazena hodnota "b" );
Omezený příležitost zachování hierarchie dědičnosti typů v odvozených návratových typech nebo možnost obrátit hierarchii původních typů v odvozených typech argumentů (kovariance návratový typ a rozporuplnost typu argumentu). V PHP lze nyní použít následující konstrukce:
třída A {}
třída B rozšiřuje A {}
class Producent {
metoda veřejné funkce(): A {}
}
class ChildProducer extends Producer {
metoda veřejné funkce(): B {}
}
Operátor rozbalení uvnitř polí „…$var“, dovolující provést náhradu existujících polí při definování nového pole;
Přidána podpora pro předběžné načítání mezipaměti objektového kódu. Přidán parametr pro nastavení opcache.preload, pomocí kterého můžete určit PHP skript, který bude zkompilován a spuštěn při spuštění serveru. Tento skript může načíst operační kód jiných souborů prostřednictvím jejich přímého zahrnutí nebo pomocí funkce opcache_compile_file();
Přidána funkce crc32c do rozšíření Hash pro výpočet kontrolních součtů pomocí Castagnoliho polynomu;
Přidána podpora funkce password_hash() pro metody hašování hesel argon2i a argin2id v implementaci knihovny Sodium, pokud je PHP sestaveno bez libargonu;
Přidána funkce mb_str_split(), podobná str_split(), ale nepracuje s bajty, ale s pozicemi znaků ve vícebajtovém řetězci;
Funkce strip_tags() má nyní možnost předat pole s názvy značek, tzn. místo strip_tags($str, ' ') nyní můžete zadat strip_tags($str, ['a', 'p']);
proc_open() umožňuje, aby byly operandy uvedeny v poli, nikoli v řetězci, aby se spouštěly, a také poskytuje přesměrování vláken a podporu pro deskriptor null souboru;
// Jako 2>&1 v shellu
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['přesměrování', 1]], $pipes);
// jako 2>/dev/null nebo 2>nul v shellu
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);
Rozšíření Firebird/Interbase, Recode a WDDX jsou ze základní distribuce vyloučeny. Tato rozšíření jsou nyní distribuována prostřednictvím PECL;
Převedeno do kategorie zastaralý funkce, jako jsou vnořené ternární operátory bez závorek, přístup k prvkům pole a řetězcům pomocí složených závorek („$var{$idx}“), funkce is_real() a přetypování na real, pomocí nadřazeného klíčového slova bez nadřazené třídy, konfigurace parametru allow_url_include pomocí array_key_exists() na objektech.
Funkce get_magic_quotes_gpc(), get_magic_quotes_runtime() a
hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().
Při pokusu o zpracování nesprávných symbolů ve funkcích bylo poskytnuto varování o použití zastaralé funkce
base_convert(), bindec(), octdec() a hexdec() a při zadávání neřetězcového vzoru v mb_ereg_replace().