Auswerten mathematischer Ausdrücke aus Zeichenfolgen mithilfe von Eval
Problem:
Beim Versuch, a auszuwerten Wenn ein mathematischer Ausdruck mithilfe von eval() in einer Zeichenfolge gespeichert wird, tritt ein „Parse-Fehler“ auf, der auf ein unerwartetes Ende von hinweist Eingabe.
Lösung:
Obwohl es aus Sicherheitsgründen im Allgemeinen nicht empfohlen wird, eval() für diesen Zweck zu verwenden, wird das Problem durch die folgende Codeänderung behoben:
$ma = "2+10"; $p = eval('return ' . $ma . ';'); print $p;
Durch die explizite Rückgabe des Ergebnisses innerhalb einer eval()-Funktion erwartet der Code eine vollständige Zeile von Code.
Alternative Lösung:
Eine sicherere und effizientere Lösung ist die Verwendung eines Tokenizers/Parsers zur Verarbeitung mathematischer Ausdrücke. Hier ist ein einfaches Regex-basiertes Beispiel:
$ma = "2+10"; if (preg_match('/(\d+)(?:\s*)([\+\-\*\/])(?:\s*)(\d+)/', $ma, $matches) !== FALSE) { $operator = $matches[2]; switch ($operator) { case '+': $p = $matches[1] + $matches[3]; break; case '-': $p = $matches[1] - $matches[3]; break; case '*': $p = $matches[1] * $matches[3]; break; case '/': $p = $matches[1] / $matches[3]; break; } echo $p; }
Das obige ist der detaillierte Inhalt vonWie kann man mathematische Ausdrücke aus Strings in PHP sicher auswerten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!