eval

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

evalВычисляет строку как PHP-код

Описание

eval(string $code): mixed

Функция вычисляет параметр code как PHP-код.

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

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

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

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

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 в таких случаях eval() возвращала логическое значение 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-функцию, заданную в первом параметре