[英]How to convert string to boolean in php
我在php中定義了這個函數
function ifstatement($statement = 'if(10 > 9;1+1;2+2)') {
// $statement = str_replace(' ', '', $statement);
if (strpos($statement, 'if(') > -1) {
$statement = rtrim(ltrim(str_replace(' ', '', $statement), 'if('), ')');
$exp = explode(';', $statement);
if ( $exp[0] ) {
if (strpos($exp[1], 'if(' )> -1) {
return ifstatement($exp[1]);
} else {
return 1;
}
} else {
if (strpos($exp[2], 'if(')> -1) {
return ifstatement($exp[2]);
} else {
return 0;
}
}
}else{
echo 'out';
}
}
問題是函數總是返回1,即使函數參數中的if語句中的條件是false,也是經過測試的
if($exp[0])
看起來$exp[0]
是一個字符串,我怎么能把它作為參數進行測試
$exp[0]
包含10 > 9
(無論你在第一次之前有什么;
),所以只有它為空字符串或'0'
才會計算為false。 要正確評估它,您應該使用eval()
函數:
$condition = '10 > 9';
$result = eval('return ' . $condition . ';');
注意:永遠不要使用
eval()
在生產環境中,除非你真的確定你輸入的是無害的,你不能做到這一點的另一種方式。
$exp[0] = (boolean) $exp[0];
可能是你正在尋找的東西
除非您要正確地執行此操作(使用解析器),否則最好讓用戶在多個字段中指定其條件。 一行將包含x
的文本字段,比較運算符的選擇字段( ==
, <
, >
),以及y
另一個文本字段。 然后他們可以指定是否匹配所有支票或任何支票。 當它們像這樣被打破時,你將能夠執行預期的邏輯,而無需使用strpos
和eval
實現一種新語言,這完全是瘋狂的。
您可以在Thunderbird的消息過濾器編輯中看到此類接口的示例:
並在iTune的智能播放列表編輯中:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.