эхо внутри цикла if

#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" . Для этого вам потребуется сопоставление и отдельное вычисление выражения. (Написание искусственного мини-синтаксического анализатора здесь не сложно, но, очевидно, излишне для вашего вопроса.)