2011-04-14 46 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"。你需要一個匹配和一個單獨的表達式評估。 (在這裏寫一個人造迷你解析器並不難,但對你的問題顯然是過分的)