Строка к если еще оценка

Я должен использовать эти строки, чтобы выполнить условие.
Из-за того, что $ op является строкой, он не может правильно выполнить условие. Пожалуйста помоги.

<?php
//$op = $condition[$i]. " " .$operant[$i]. " " .$participant_index;
$op = "1 == 5";
if($type[$i]=="person" && $op){
echo "ok";
}
?>

0

Решение

Попробуйте этот код:

<?php
//$op = $condition[$i]. " " .$operant[$i]. " " .$participant_index;
$op = "1 == 5";
if($type[$i]=="person" && eval("return $op;"))
{
echo "ok";
}
?>
0

Другие решения

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

Лучшее решение — использовать механизм ограниченных выражений, который анализирует и оценивает строку, имея возможность обрабатывать только несколько выбранных выражений. Вы могли бы написать что-то подобное самостоятельно, но сложность этого в значительной степени зависит от того, какие выражения вы, возможно, допустите. Платформа Symfony предлагает достойный ExpressionLanguage составная часть который уже может сделать именно это.

1

Если вы можете гарантировать, что значение $op не зло, тогда используйте eval:

if ($type[$i]=="person" && eval("return ".$op){
echo "ok";
}

Будьте осторожны с этим, так как он будет анализировать содержимое $op как код PHP.

1

Простой (но потенциально вредный) способ:

$op = "1 == 5";

if (eval("return " . $op . ";")) {
// do your thing.
}

увидеть http://php.net/eval

0