eval

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

evalОценивает строку как PHP-код

Описание

eval(string $code): mixed

Языковая конструкция интерпретирует строку code как PHP-код.

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

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

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

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

code

Корректный PHP-код, который требуется выполнить.

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

Конструкция выполнит только корректный PHP-код, поэтому каждую инструкцию кода потребуется правильно завершить точкой с запятой. Строка 'echo "Привет!"' сгенерирует синтаксическую ошибку, а строка 'echo "Привет!";' сработает.

Инструкция return немедленно завершит выполнение кода.

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

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

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

Примеры

Пример #1 Пример выполнения строки PHP-кода языковой конструкцией eval() — простое слияние текста

<?php

$string
= 'чашка';
$name = 'кофе';

$str = 'Это — $string $name.';

echo
$str. "\n";

eval(
"\$str = \"$str\";");

echo
$str. "\n";

?>

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

Это — $string $name.
Это — чашка кофе.

Примечания

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

Подсказка

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

Замечание:

Скрипт завершает работу, если в строке кода возникает фатальная ошибка.

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

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