Vývoj jazyka PHP pokračuje a s každou novou verzí přicházejí změny, které zahrnují odstranění zastaralých funkcí a přidání nových možností. Přechod z PHP 7 na PHP 8 přinesl několik významných změn v dostupných funkcích. V tomto článku se podíváme na některé z funkcí, které byly v PHP 7, ale v PHP 8 už nejsou dostupné, a nabídneme možnosti, jak je nahradit.
1. Vytváření dynamických proměnných s $$
Původní přístup v PHP 7: V PHP 7 bylo běžné vytvářet dynamické proměnné pomocí dvojitých dolarů ($$
). Tato technika umožňovala vytvoření proměnných s názvy definovanými v jiných proměnných.
$name = 'variable';
$$name = 'value';
echo $variable; // Vypíše 'value'
Nový přístup v PHP 8: V PHP 8 by měli vývojáři upřednostňovat explicitnější a bezpečnější způsoby práce s proměnnými, aby se vyhnuli potenciálním bezpečnostním rizikům a nejasnostem. Jednou z možností je použití polí nebo objektů pro dynamické ukládání hodnot.
$data = [];
$name = 'variable';
$data[$name] = 'value';
echo $data['variable']; // Vypíše 'value'
2. Funkce each()
Původní přístup v PHP 7: Funkce each()
byla v PHP 7 často používána pro iteraci nad poli. Tato funkce vracela aktuální klíč a hodnotu a posunula ukazatel pole.
$array = ['a' => 1, 'b' => 2];
while (list($key, $value) = each($array)) {
echo "$key => $value\n";
}
Nový přístup v PHP 8: Funkce each()
byla v PHP 8 zastaralá a odstraněna. Nyní je doporučeno používat buď foreach
, nebo kombinaci funkcí key()
, current()
, next()
pro iteraci.
$array = ['a' => 1, 'b' => 2];
foreach ($array as $key => $value) {
echo "$key => $value\n";
}
3. Funkce create_function()
Původní přístup v PHP 7: create_function()
byla funkcí v PHP 7, která umožňovala vytvoření anonymní funkce z řetězce. Toto použití bylo často kritizováno pro potenciální bezpečnostní rizika.
$func = create_function('$a', 'return $a + 1;');
echo $func(1); // Vypíše 2
Nový přístup v PHP 8: V PHP 8 je doporučeno používat Closure nebo anonymní funkce, které jsou bezpečnější a čitelnější.
$func = fn($a) => $a + 1;
echo $func(1); // Vypíše 2
4. get_magic_quotes_gpc() a get_magic_quotes_runtime()
Původní přístup v PHP 7: Magic quotes byly mechanismus, který automaticky escapoval vstupní data. Funkce get_magic_quotes_gpc()
a get_magic_quotes_runtime()
sloužily k zjištění, zda jsou magic quotes aktivní.
if (get_magic_quotes_gpc()) {
$data = stripslashes($data);
}
Nový přístup v PHP 8: Magic quotes byly zcela odstraněny z PHP. Nyní je vývojářům doporučeno sanitizovat a escapovat vstupní data explicitně pomocí funkcí jako htmlspecialchars()
nebo filter_input()
.
$data = htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
Tyto změny v PHP 8 vedou k bezpečnějšímu a přehlednějšímu kódu, ale vyžadují od vývojářů, aby se seznámili s novými postupy a aktualizovali starý kód podle nových standardů.