2010-12-09 28 views
0

j'ai des choses comme cela en utilisant eval():Comment éviter d'utiliser eval pour une chaîne particulière de variables qui doit être exécuté

$result = eval("return ".$value1.$operator.$value2.";"); 

Lorsque l'exploitant est d'une variable ou un champ db.

Comment pourrais-je obtenir le même résultat sans utiliser eval? C'est possible?

Ce n'est pas un problème de sécurité que les valeurs/opérateur ne sont pas entrées par l'utilisateur, mais il peut être un problème de performances si this comment au manuel PHP est quelque chose d'aller. De plus, si à un moment donné, je veux essayer HipHop de Facebook, je dois remplacer toutes les utilisations de eval avec quelque chose d'autre.

+0

Vous pouvez voir http://stackoverflow.com/questions/1015242 –

Répondre

2
if(strcmp($operator, "+") == 0) { 
    return $value1 + $value2; 
} 
else if(strcmp($operator, "*") == 0) { 
return $value1 * $value2; 
} 
... 

Comme @Gumbo mentionné, vous pouvez également utiliser switch()

+1

Mieux utiliser 'switch'. – Gumbo

1

Eh bien, je ne suis pas sûr des opérateurs, mais vous pouvez faire quelque chose comme ceci avec des noms de fonction:

function add($x, $y) { 
    return $x + $y; 
} 

$value1 = 1; 
$value2 = 2; 
$func = "add"; 

$result = $func($value1, $value2); 

Vous peut même faire cela avec des fonctions intégrées:

$func = 'array_sum'; 
$result = $func(array($value1, $value2));