PHP - 如果条件在字符串内

时间:2010-07-07 04:24:53

标签: php string if-statement

一个容易提出的问题,希望不要愚蠢。

$var=0;
$condition="$var!=0";
if($condition) {
    # do something #
}
else {
    # do something else #
}

显然,那里的代码不能按预期工作。有没有一种很好的方法从字符串中获取if条件?或者我是否必须以令人不安的方式解析字符串?

EDIT 我没有很好地解释自己。 事实是,字符串可能包含任何可以想象的条件:

  • $ var> 0
  • $ var< 0
  • $ var == 0

我从一个xml文件中读取这个条件作为字符串,所以我不知道我会找到什么。

5 个答案:

答案 0 :(得分:4)

eval()功能是这里的简单方法。 E.g:

if(eval($condition)) {
    # do something #
}
else {
    # do something else #
}

必须强调eval()是邪恶的。使用eval()很容易使网站变得非常不安全,即使你真的知道自己在做什么。特别是,即使您确定代码是安全的现在,在代码的完全不同部分添加一些功能后也可能不是这样。

据说eval()有其用途,特别是在快速而肮脏的单一用途脚本(如迁移脚本)中。

如果您正在撰写面向世界的网站,则在使用eval()时需要小心 * extreme * 。通常,必要的护理量比实施一些非eval()解决方案更困难。

答案 1 :(得分:4)

因为还没有人发布它。问问自己需要进行哪些比较。如果他们正在进行简单的数学运算,您可能希望在架构中有这样的东西。

<conditions>
  <notEqual var="var" value="0" />
</conditions>

它允许你有多个条件,应该相对简单地解析并转换为php代码。

答案 2 :(得分:1)

为什么不这样做:

$var = 0;
if ($var != 0){
    # do something #
}
else {
    # do something else #
}

编辑:甚至

$var = 0;
$condition = 0
if ($var != $condition){
    # do something #
}
else {
    # do something else #
}

答案 3 :(得分:0)

  1. $condition的内容不是$var!=0,而是0=0(由于$未被双引号转义(\$

  2. 您可以使用eval功能执行此操作。

  3. 然而,eval是邪恶的。问问自己是否真的需要这样做。如果有任何其他方式,请采取它。

答案 4 :(得分:-1)

好的,你可以使用邪恶的Eval。但是如果您的情况实际上和您提议的一样简单,您可以使用正则表达式来测试条件......不需要评估。