2011-04-25 14 views

Odpowiedz

14

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 

} 
+0

to odpowiedź, której szukałem :) – felamaslen

+0

Cieszę się, że mogłem pomóc :) Powodzenia! –

6

Najprostszym ale najbardziej niebezpieczna metoda polega na użyciu eval.

$c = eval("return $a $char $b;"); 
+2

ale uniknąć eval. –

+1

@Shakti, uniknąłbym 'eval' również dla kodu produkcyjnego. – Matthew

+0

Wolałbym nie używać eval, ponieważ wartości pochodzą z danych wprowadzonych przez użytkownika. – felamaslen

1

spójrz na funkcję eval(). będziesz musiał zbudować poprawne polecenie php i uruchomić wewnątrz eval(), aby wyodrębnić wynik.

1

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; 
} 
+0

Tak, mam zamiar wybrać tę opcję. Dzięki :) – felamaslen

7

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... 
    } 
} 
+0

tak ... ludzie odpowiadają zbyt szybko! – felamaslen

+2

jeśli operatorem jest '=', twój kod wygeneruje 'sumę 'argumentów. Czy nie powinno być "przerwy"? –

+0

'=' 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. –

Powiązane problemy