我使用當我嘗試在if
條件使用變量,創建動態像條件語句在if條件下不起作用?
$condition_string = '1==0 AND 1==1';
條件的動態腳本,這是行不通的。
if($condition_string) {
// do something
}
但是,如果我用
if(1==0 AND 1==1) {
// do something
}
然後它工作。
有人可以告訴如何在條件中使用變量嗎?
我使用當我嘗試在if
條件使用變量,創建動態像條件語句在if條件下不起作用?
$condition_string = '1==0 AND 1==1';
條件的動態腳本,這是行不通的。
if($condition_string) {
// do something
}
但是,如果我用
if(1==0 AND 1==1) {
// do something
}
然後它工作。
有人可以告訴如何在條件中使用變量嗎?
$condition_string = '1==0 AND 1==1'; if($condition_string) { // do something }
在if
語句中的條件將是converted to boolean
其被評估之前。一個字符串將被評估爲TRUE
,除非它是一個空字符串或字符串"0"
。因此,你上面的條件永遠是真實的。
一種選擇是使用eval
評估if
以外的條件:
eval ('$condition_string = (1==0 OR 1==1);');
if($condition_string) {
// do something
}
注意AND
有下precedence比=
運營商,所以你必須使用括號周圍的表達。如果您使用&&
運營商,則這不是必需的,該運營商的更高,優先於=
。
另請注意,eval
manual page警告:
注意
中的eval()語言結構是非常危險的,因爲它允許任意PHP代碼執行。因此不鼓勵它的使用。如果您已經仔細覈實沒有其他選擇而不是使用此構造,請特別注意不要將任何用戶提供的數據傳遞給它,而不事先進行適當的驗證。
我會讓使用eval
功能,但是請注意這裏面在PHP manual for eval說:
注意 中的eval()語言結構是非常危險的,因爲它允許任意處決PHP代碼。因此不鼓勵它的使用。如果您已經仔細覈實沒有其他選擇而不是使用此構造,請特別注意不要將任何用戶提供的數據傳遞給它,而不事先進行適當的驗證。
function eval_str($string) {
return eval("return $string;");
}
然後,你可以這樣調用
$condition_string = '1==0 AND 1==1';
if(eval_str($rule_condition_string)) { // false
// code
}
還有另一種方法,雖然它更復雜一些。但是,它避免使用eval,如下所示:
<?php
$condition_string = '1==0 || 1==1';
$arr = preg_split("/[ ==||]+/",$condition_string);
$callback = function($s){
return (int) $s;
};
$arrNums = array_map($callback,$arr);
list($n1, $n2, $n3, $n4) = $arrNums;
if (($n1 == $n2) || ($n3 == $n4)) {
echo "result of logical ||: this works\n";
}
// result of logical ||: this works
preg_split搜索字符串是否包含空格==或||。如果是這樣的話,字符串被分割成只包含數字的字符串數組。 Arrap_map創建一個新數組,其中包含與$ arr中的每個數字字符串對應的整數。 $ arrNums被分成一個包含變量的列表,其中包含了它的值。 if條件將每對數字進行相等比較。由於代碼使用邏輯||運算符,當第二對數字評估爲真時,條件也與輸出的確認字符串的最終結果一樣評估爲真。
什麼是$ rule_condition_string? – Beatles1692 2014-11-05 07:57:46
AND是PHP中的&&。 – 2014-11-05 07:58:08
對不起,它是$ condition_string。 – Ankit 2014-11-05 08:00:05