Załóżmy, że ma łańcuch, $char. $char == "*".
PHP zastosowanie łańcucha jako operatora
również dwie zmienne $ a $ b, które są równe "4" i "5", odpowiednio.
Jak mogę uzyskać wynik $a $char $b, ie 4 * 5 ?
Thanks :)
Załóżmy, że ma łańcuch, $char. $char == "*".
PHP zastosowanie łańcucha jako operatora
również dwie zmienne $ a $ b, które są równe "4" i "5", odpowiednio.
Jak mogę uzyskać wynik $a $char $b, ie 4 * 5 ?
Thanks :)
Można użyć eval()
jak sugeruje @konforce jednak najbezpieczniejsza trasa będzie coś takiego:
$left = (int)$a;
$right = (int)$b;
$result = 0;
switch($char){
case "*":
$result = $left * $right;
break;
case "+";
$result = $left + $right;
break;
// etc
}
Najprostszym ale najbardziej niebezpieczna metoda polega na użyciu eval
.
$c = eval("return $a $char $b;");
ale uniknąć eval. –
@Shakti, uniknąłbym 'eval' również dla kodu produkcyjnego. – Matthew
Wolałbym nie używać eval, ponieważ wartości pochodzą z danych wprowadzonych przez użytkownika. – felamaslen
spójrz na funkcję eval(). będziesz musiał zbudować poprawne polecenie php i uruchomić wewnątrz eval(), aby wyodrębnić wynik.
Można zrobić z eval
jednak nie sugeruje, używając eval
.
Jeśli istnieje operator może przez przypadek coś należy sprawdzić co operator jest przed użyciem
switch($char)
{
case '*':
$result= $a * $b;
break;
case '+':
$result= $a + $b;
break;
}
Tak, mam zamiar wybrać tę opcję. Dzięki :) – felamaslen
najbezpieczniejszą metodą jest konstruktem przełącznik:
function my_operator($a, $b, $char) {
switch($char) {
case '=': return $a = $b;
case '*': return $a * $b;
case '+': return $a + $b;
etc...
}
}
tak ... ludzie odpowiadają zbyt szybko! – felamaslen
jeśli operatorem jest '=', twój kod wygeneruje 'sumę 'argumentów. Czy nie powinno być "przerwy"? –
'=' nie zrobiłoby nic w tym przypadku, chyba że $ a zostało przekazane jako odniesienie. Przypisanie zostanie utracone, gdy tylko funkcja powróci, w przeciwnym razie. To tylko przykład. –
to odpowiedź, której szukałem :) – felamaslen
Cieszę się, że mogłem pomóc :) Powodzenia! –