10
votes

PHP Utilisez la chaîne comme opérateur

dis que j'ai une chaîne, $ char. $ char == "*".

J'ai aussi deux variables, $ A et $ B, qui est égale à "4" et "5" respectivement.

Comment puis-je obtenir le résultat de $ A $ A $ CHAR $ B, IE 4 * 5?

Merci:)


0 commentaires

6 Réponses :


6
votes

La méthode la plus simple mais la plus dangereuse consiste à utiliser eval . xxx


5 commentaires

Je préférerais ne pas utiliser Eval car les valeurs proviennent de l'entrée de l'utilisateur.


@Konforce: enfin tout ce que nous devons utiliser le code dans la production, ils suggèrent que nous suggérons d'évaluer


@Fela, vous devriez TOUJOURS Valider l'utilisateur Saisir si vous utilisez eval ou non. Si vous validez que $ a et $ b sont des numéros appropriés et que $ char est une opération appropriée, puis eval sera en sécurité. Cela dit, je n'utiliserais toujours pas eval sur un site public.


Si c'est un projet local, il n'y a aucune raison de ne pas utiliser eval .


Je n'utilise pas Eval, j'utilise des commutateurs avec différents opérateurs. Toute entrée utilisateur est désinfectée bien sûr.



1
votes

Jetez un coup d'œil sur le eval () fonction. Vous devrez construire une commande PHP appropriée et courir à l'intérieur de l'EVAL () pour extraire le résultat.


0 commentaires

17
votes

Vous pouvez utiliser eval () comme suggéré par @konforce, mais la route la plus sûre serait quelque chose comme: xxx


2 commentaires

c'est la réponse que je cherchais :)


Heureux que je puisse aider :) bonne chance!



1
votes

Vous pouvez faire avec eval Cependant, je ne suggérerais pas d'utiliser eval .

S'il y a un opérateur de cas peut par tout ce que vous devriez vérifier quel opérateur est avant d'utiliser < / p> xxx


1 commentaires

Oui, je vais aller avec cette option. Merci :)



9
votes

La méthode la plus sûre est une construction de commutation:

function my_operator($a, $b, $char) {
    switch($char) {
        case '=': return $a = $b;
        case '*': return $a * $b;
        case '+': return $a + $b;
        etc...
    }
}


4 commentaires

Oui ... Les gens répondent trop vite!


Si l'opérateur est = Votre code produira somme des opérandes. Il ne faut pas y avoir un pause ?


Le '=' ne ferait rien dans ce cas, à moins que $, a été transmis comme une référence. L'affectation serait perdue dès que la fonction renvoie, sinon. C'est juste un exemple.


@Shaktisingh pas besoin de break quand il y a retour



0
votes
<?php
$a = 'alex';
$b = "alex";
$c = "==";
function abc($a,$b,$c){
  $d = 'return ($a '.$c.' $b) ? true : false;';
  return eval($d);
}
if(abc($a,$b,$c)){
  echo "condition true";
}else{
  echo "condition false";
}
// echo $e;
?>

1 commentaires

S'il vous plaît expliquer votre solution