字符串到if else语句

时间:2014-11-12 09:30:51

标签: php if-statement conditional-statements

我必须使用这些字符串来完成这个条件。 由于$ op是字符串,因此无法正确运行条件。请帮忙。

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

4 个答案:

答案 0 :(得分:1)

你需要评估该字符串作为代码,PHP不会暗中为你做这件事。
eval()可以做到这一点,但由于eval将使用完整的PHP权限自由执行您提供的所有代码,这是一个巨大的安全风险,具体取决于这些字符串的位置来自。

更好的解决方案是使用有限的表达式引擎来解析和评估字符串,只能处理一些选择表达式。你可以自己写这样的东西,但这种困难很大程度上取决于你可能允许的表达方式。 Symfony框架提供了一个不错的ExpressionLanguage component,它已经可以做到这一点。

答案 1 :(得分:1)

如果您可以保证$op的值不是邪恶的,那么请使用eval

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

请注意这一点,因为它会将$op的内容解析为PHP代码。

答案 2 :(得分:0)

简单(但可能有害)的方式:

$op = "1 == 5";

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

请参阅http://php.net/eval

答案 3 :(得分:0)

试试这段代码:

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