回声内如果循环
问题描述:
我有这样回声内如果循环
$string = "0>0.1";
我想这样
if($string)
{
///something
}
但评估这个的,如果循环中的变量即时得到一个错误,如果我这样做。如何去做
答
你不明白评估或字符串是如何工作的。 如果你把任何东西放入一个字符串中,它将不会被评估,而是从那个时候开始包含这个值。
$string = "0>0.1"; // contains "0>0.1"
$bool = 0>0.1; // contains TRUE
IF语句需要一个布尔值而不是字符串。
答
您可以使用eval
来评估字符串中的内容。请记住,eval
是邪恶的,任何PHP代码都可能在其中。
+0
+1 也许可以更好地说明您的观点: 如果示例中的$ string来自POST或GET,恶意用户可以在POST中输入PHP代码或GET变量,这会在'eval'执行时执行。 – 2011-04-14 12:52:59
答
你得到了一些可怕的建议与您的副本。这里是一个更安全的eval变种,实际上将评估一个结果:
$str = "0>0.1";
if (preg_replace('/^(\d+\.?\d*)([><])(\d+\.?\d*)$/e', "$1 $2 $3", $str))
{
注意,这将仍然是无效的字符串返回真像"1>2b"
。你需要一个匹配和一个单独的表达式评估。 (在这里写一个人造迷你解析器并不难,但对你的问题显然是过分的)
哪个错误?我什至不知道,这段代码应该做什么(一个非空字符串总是在这里被评估为“true”)。 – KingCrunch 2011-04-14 12:24:08
'if()'不会形成循环。 – Spudley 2011-04-14 12:25:20
嘿伙计们,@Deepak问的是真正的问题,他想用eval。 – 2011-04-14 12:37:41