Funkce `eval` slouží ke spuštění předaného řetězce jako PHP kódu.
PHP je interpretovaný jazyk, což znamená zejména to, že se jeho kód vyhodnocuje tzv. interpretem, což je speciální typ programu, který čte napsaný kód a ten v reálném čase vyhodnocuje přímo z řetězce. Jiné jazyky (například C) se musí před spuštěním kompilovat do strojového kódu.
Díky tomu, že se PHP interpretuje, tak existuje způsob, jak za běhu programu změnit, co přesně se bude vyhodnocovat a kód sestavit dokonce dynamicky, a přesně k tomu se eval()
hodí.
Funkci eval
použijte jen v případě, kdy přesně víte, co děláte! To znamená zejména to, že máte zkontrolované veškeré vstupy od uživatele a nemůže dojít k narušení bezpečnosti. Pokud by se totiž uživateli podařilo do funkce eval
propašovat jeho řetězec, bude vyhodnocen jako reálný kód a tím může například smazat celý web, ukrást databázi nebo získat kontrolu nad celým serverem.
Dobrých příkladů, kde lze eval
použít moc neexistuje, protože prakticky vždy existuje lepší způsob, jak úlohu řešit.
Použít lze například při vyhodnocování výrazů:
// Uživatelský dotaz$query = '5 + 3 * 2';// Zpracování výrazu jako běžného PHP kódueval('$result = @(' . $query . ');');// Výpis proměnné s řešením výrazuecho $result; // vypíše 11
Podrobnosti jsou v článku Kalkulačka v PHP: Zpracování matematického výrazu jako řetězec.
Občas se eval
používá pro vyhodnocení vygenerovaného kódu, typicky překompilované šablony.
Jak již ale bylo řečeno, tak lze každý případ řešit jinak a lépe a v tomto případě dává větší smysl serializovanou šablonu uložit do samostatného PHP souboru a ten načíst přes require
nebo include
. Kromě toho, že budeme mít nad obsahem šablony plnou kontrolu, tak také zůstane fyzicky na disku, což podporuje zlepšení výkonu aplikace kvůli možnosti cachování.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Nabízím trénink vývojářů, konzultace, školení a analýzu návrhových vzorů. Osobně v Praze nebo online.
Napište mi, pokud si nevíte rady.
Lektor: Jan Barášek
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | cs