Évaluation d'expressions mathématiques à partir de chaînes à l'aide d'Eval
Problème :
Lors de la tentative d'évaluation d'un expression mathématique stockée dans une chaîne à l'aide de eval(), une "erreur d'analyse" se produit, indiquant une fin inattendue de input.
Solution :
Bien qu'il ne soit généralement pas recommandé d'utiliser eval() à cette fin en raison de problèmes de sécurité, la modification de code suivante résout le problème :
$ma = "2+10"; $p = eval('return ' . $ma . ';'); print $p;
En renvoyant explicitement le résultat dans une fonction eval(), le code attend une ligne complète de code.
Solution alternative :
Une solution plus sûre et plus efficace consiste à utiliser un tokenizer/analyseur pour gérer les expressions mathématiques. Voici un exemple simple basé sur une expression régulière :
$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; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!