#php #if-statement
#php #if-оператор
Вопрос:
У меня есть переменная, подобная этой
$string = "0>0.1";
Я хочу оценить это внутри цикла if следующим образом
if($string)
{
///something
}
но я получаю сообщение об ошибке, если я делаю это. Как это сделать
Комментарии:
1. Какая ошибка? Я даже не знаю, что должен делать этот фрагмент кода (здесь всегда вычисляется непустая строка
true
).2. Эй, ребята, @Deepak задает искренний вопрос, он хочет использовать eval.
3. я получаю ошибку, когда пытаюсь выполнить это if (echo $ string)
Ответ №1:
вы не понимаете, как работают вычисления или строки. Если вы поместите что-либо в строку, оно не будет вычислено, а просто будет содержать это значение с этого момента.
$string = "0>0.1"; // contains "0>0.1"
$bool = 0>0.1; // contains TRUE
Оператору IF требуется логическое значение, а не строка.
Ответ №2:
Вы можете использовать eval
для оценки объектов в строках. Помните, что eval
это зло, и в нем может быть любой php-код.
Комментарии:
1. 1 возможно, чтобы лучше проиллюстрировать вашу точку зрения: если $string в вашем примере получен из POST или GET, злонамеренный пользователь мог ввести PHP-код в переменную POST или GET, которая была бы выполнена в момент
eval
выполнения.
Ответ №3:
Вы получили какой-то ужасный совет с вашим дубликатом. Вот более безопасный вариант eval, который фактически приведет к результату:
$str = "0>0.1";
if (preg_replace('/^(d .?d*)([><])(d .?d*)$/e', "$1 $2 $3", $str))
{
Обратите внимание, что это все равно вернет true для недопустимых строк типа "1>2b"
. Для этого вам потребуется сопоставление и отдельное вычисление выражения. (Написание искусственного мини-синтаксического анализатора здесь не сложно, но, очевидно, излишне для вашего вопроса.)