evalВычисляет строку как PHP-код
&reftitle.description;
mixedevalstringcode
Функция вычисляет параметр code как PHP-код.
Код, который вычисляет функция, наследует
область видимости переменных той строки,
на которой вызвали языковую конструкцию eval.
Каждая переменная, доступная на этой строке, будет доступна для чтения
и изменения в коде, который вычисляет языковая конструкция.
При этом функции и классы, которые объявят в выполняемом коде, получат глобальную область видимости.
Говоря по-другому, компилятор вычислит код так, как если бы это был отдельный
подключённый файл.
Языковая конструкция evalочень
опасна, поскольку разрешает выполнять произвольный PHP-код.
Поэтому не рекомендуется пользоваться этой языковой конструкцией.
Если тщательная проверка показала, что нет другого выхода,
кроме как использовать эту конструкцию, внимательно проверяют, чтобы в языковую конструкцию
не передавались пользовательские данные без правильной предварительной проверки.
&reftitle.parameters;
code
Корректный PHP-код для оценки и выполнения.
Код нельзя оборачивать открывающим и закрывающим
PHP-тегами, то есть
необходимо передать 'echo "Привет!";',
а не '<?php echo "Привет!"; >'.
По-прежнему разрешается переключаться между режимами PHP- и HTML-кода, например:
'echo "Код PHP!"; ?>Код HTML<?php echo "Снова код PHP!";'.
Строка кода должна быть корректным PHP-кодом. Требование включает и то,
что инструкции требуется правильно разделять точкой с запятой.
Строка 'echo "Привет!"' сгенерирует ошибку синтаксиса,
а строка 'echo "Привет!";' будет работать.
Инструкция return немедленно прекратит вычисление кода.
Код выполнится в области видимости кода, который вызывал конструкцию eval.
Поэтому переменные, которые определили или изменили в вызове eval,
сохранят видимость после завершения вызова конструкции.
&reftitle.returnvalues;
Языковая конструкция eval возвращает значение &null;,
если только в вычисляемом коде не вызывается инструкция return.
Начиная с PHP 7, если в вычисляемом коде допустили синтаксическую ошибку,
конструкция eval выбрасывает исключение ParseError. До PHP 7 в таких случаях
eval возвращала логическое значение &false;, а следующий код
выполнялся в обычном режиме. Невозможно отловить синтаксическую ошибку в конструкции eval
функцией set_error_handler.
&reftitle.examples;
Пример использования языковой конструкции eval — простое слияние текста
]]>
&example.outputs;
&reftitle.notes;
¬e.language-construct;
&tip.ob-capture;
Весь скрипт завершает работу, если в вычисляемом коде возникла фатальная ошибка.
&reftitle.seealso;
call_user_func