eval

(PHP 4, PHP 5, PHP 7, PHP 8)

evalРасценивает строку как PHP-код и выполняет его

Описание

eval(string$code): mixed

Выполняет переданную в параметре code строку как код PHP.

Выполняемый код наследует ту же область видимости переменной, что и строка, на которой языковая конструкция eval() была вызвана. Любые доступные на этой строке переменные будут доступны для чтения и изменения в выполняемом коде. Однако все объявленные в этом коде функции и классы получат глобальную область видимости. Говоря по-другому, компилятор расценит выполняемый код так, как если бы это был подключёный файл.

Предостережение

Языковая конструкция eval() может быть очень опасной, поскольку может выполнять произвольный код. Поэтому от работы с ней воздерживаются. Если тщательный поиск других решений показал, что альтернативы нет, внимательно проверяют, чтобы в неё не передавались пользовательские данные без их правильной предварительной проверки.

Список параметров

code

Выполняемая строка кода PHP.

Код не должен быть обёрнут открывающимся и закрывающимся тегами PHP, то есть строка должна быть, например, такой: 'echo "Привет!";', но не такой '<?php echo "Привет!"; >'. Можно переключаться между режимами PHP- и HTML-кода, например: 'echo "Код PHP!"; ?>Код HTML<?php echo "Снова код PHP!";'.

Передаваемый код должен быть верным выполняемым кодом PHP. Это значит, что операторы должны быть разделены точкой с запятой (;). При выполнении строки 'echo "Привет!"' будет сгенерирована ошибка, а строка 'echo "Привет!";' будет успешно выполнена.

Указание в строке кода ключевого слова return прекращает выполнение.

Код из строки будет выполнен в той области видимости, в которой вызвана конструкция eval(). Поэтому переменные, которые определены или изменены в ней, сохранят видимость после завершения вызова конструкции eval().

Возвращаемые значения

Языковая конструкция eval() возвращает значение null, или значение, которое вернул вызванный в выполняемом коде оператор return. Начиная с PHP 7, если в выполняемом коде присутствует ошибка, то конструкция eval() вызывает исключение "ParseError". До PHP 7 в таких случаях возвращалось логическое значение false и продолжалось нормальное выполнение последующего кода. Невозможно поймать ошибку парсера в конструкции eval() функцией set_error_handler().

Примеры

Пример #1 Пример функции eval() — простое слияние текста

<?php
$string
= 'чашка';
$name = 'кофе';
$str = 'Это $string с моим $name.';
echo
$str. "\n";
eval(
"\$str = \"$str\";");
echo
$str. "\n";
?>

Результат выполнения приведённого примера:

Это $string с моим $name. Это чашка с моим кофе.

Примечания

Замечание: Поскольку это языковая конструкция, а не функция, её нельзя вызывать как переменную функцию или передавать как именованный аргумент.

Подсказка

Как и всё, что выводит результат в браузер, функции контроля вывода можно вызывать, чтобы перехватить выводимые этой функцией данные и сохранять их, например в строку (string).

Замечание:

В случае фатальной ошибки в выполняемом коде прекращается выполнение всего скрипта.

Смотрите также

  • call_user_func() - Вызывает callback-функцию, заданную в первом параметре
To Top