предположим, что я делаю это в php:
eval("\$answer=1--1;");
Выражение 1–1 приведет к синтаксической ошибке в eval, мой вопрос заключается в том, как определить ошибку и обработать ее изящно? т.е.: ошибка catch в eval, а затем распечатать полезное сообщение. Прямо сейчас, он просто выплевывает «Ошибка анализа: синтаксическая ошибка, неожиданный T_DEC». К сожалению, в руководстве php указано, что невозможно обнаружить ошибки разбора с помощью функции set_error_handler ().
Это для простого школьного задания, и они предложили использовать «eval ()». Поскольку назначение тривиально, возможно, нет необходимости беспокоиться об этих редких случаях.
Предварительно ожидающий символ @
для eval
для подавления вывода ошибки, а затем путем проверки error_get_last()
:
$test = @eval($str); if (error_get_last()) var_dump(error_get_last());
Затем проанализируйте токен PHP, указанный в сообщении об ошибке (значение «сообщение» или T_DEC
в вашем случае) по списку: http://php.net/manual/en/tokens.php
Тем не менее, некоторые ошибки синтаксического анализа могут вывести из строя весь ваш скрипт, например, вызвать неопределенные функции. И, поскольку вы подавили вывод ошибки, сбой не появится в ваших журналах. В принципе: избегайте eval
для чего-либо другого, кроме забавной игрушки, чтобы пройти время.
Редактировать: я шел по предположению "\$answer=1--1;"
на самом деле это не значение, которое вы хотите проверить (просто слишком очевидное), а просто пример тестирования того, какие строки вы можете переходить на eval. Если это действительно так, вы должны просто исправить это прямо там. Но если вы хотите передать и проверить любую строку вообще в eval, то это поможет.
echo 'd41d8cd98f00b204e9800998ecf8427e';
, Кроме того, используйте Parsekit .
Нет никакой причины использовать eval для математических уравнений.
Как есть тысячи парсеров математики вокруг. Безопасный и обслуживаемый.