2011-04-14 74 views
-2

我有这样回声内如果循环

$string = "0>0.1"; 

我想这样

if($string) 
{ 
    ///something 
} 

但评估这个的,如果循环中的变量即时得到一个错误,如果我这样做。如何去做

+2

哪个错误?我什至不知道,这段代码应该做什么(一个非空字符串总是在这里被评估为“true”)。 – KingCrunch 2011-04-14 12:24:08

+3

'if()'不会形成循环。 – Spudley 2011-04-14 12:25:20

+0

嘿伙计们,@Deepak问的是真正的问题,他想用eval。 – 2011-04-14 12:37:41

回答

1

你不明白评估或字符串是如何工作的。 如果你把任何东西放入一个字符串中,它将不会被评估,而是从那个时候开始包含这个值。

$string = "0>0.1"; // contains "0>0.1" 

$bool = 0>0.1; // contains TRUE 

IF语句需要一个布尔值而不是字符串。

1

您可以使用eval来评估字符串中的内容。请记住,eval是邪恶的,任何PHP代码都可能在其中。

+0

+1 也许可以更好地说明您的观点: 如果示例中的$ string来自POST或GET,恶意用户可以在POST中输入PHP代码或GET变量,这会在'eval'执行时执行。 – 2011-04-14 12:52:59

0

你得到了一些可怕的建议与您的副本。这里是一个更安全的eval变种,实际上将评估一个结果:

$str = "0>0.1"; 
if (preg_replace('/^(\d+\.?\d*)([><])(\d+\.?\d*)$/e', "$1 $2 $3", $str)) 
{ 

注意,这将仍然是无效的字符串返回真像"1>2b"。你需要一个匹配和一个单独的表达式评估。 (在这里写一个人造迷你解析器并不难,但对你的问题显然是过分的)