我試圖通過檢查變量來避免重複我的代碼,如果它是某個運算符。運算符(操作數?)作爲參數
基本上..
$op = $_POST['operator'];
$x = 5;
$y = 2;
$result = $x /* $op instead of '+'/'-'/'*'/'/'/'%' */ $y;
這是可能的,或者我會送運營商作爲一個字符串和重複每個運營類型的代碼?
我試圖通過檢查變量來避免重複我的代碼,如果它是某個運算符。運算符(操作數?)作爲參數
基本上..
$op = $_POST['operator'];
$x = 5;
$y = 2;
$result = $x /* $op instead of '+'/'-'/'*'/'/'/'%' */ $y;
這是可能的,或者我會送運營商作爲一個字符串和重複每個運營類型的代碼?
這是一個很大安全做這樣的事情:
$x = 5;
$y = 2;
switch($_POST['operator']){
case '+':
$result = $x + $y;
break;
case '-':
$result = $x - $y;
break;
case '*':
$result = $x*$y;
break;
case '/':
$result = $x/$y;
break;
case '%':
$result = $x % $y;
break;
default:
$result = 'Operator not supported';
}
類似的規定。
Ahem。你可以eval
。
$result = eval("$x $op $y");
但這危險,你應該非常小心淨化你的變量。有一種說法就像「如果你的問題需要使用eval
,那麼問題就是錯誤的。」類似的東西。這幾乎當然是更好的做這樣的事情:
function apply_op($x, $y, $op) {
switch ($op) {
case '+': return $x + $y;
...
}
}
所有參數將被適當處理。謝謝! :) –
而eval往往表明你做錯了某件事 - 它的重量遠遠超過危險 - 即使是在大寫字母和粗體字中) – hakre
@hakre:我通常會說「危險的」比「錯誤的」更糟糕, 。 –
可以讓這個:
$operators = array("+", "-","*","%","/");
$op = $_POST["operator"];
if(in_array($op, $operators)) {
echo eval("$x $op $y");
} else {
echo "Operator not supported";
}
在這種情況下是相當危險的,因爲$ op是用戶輸入。用戶可以輸入任何內容,包括執行一些危險的PHP代碼。 – Sufendy
相當長,但仍然比'eval()更好'使用eval的恕我直言 – Sufendy