[résolu] signe opératoire contenu dans une variable ?

signe opératoire contenu dans une variable ? [résolu] - PHP - Programmation

Marsh Posté le 05-04-2008 à 21:07:21    

Bonjour tout le monde !
 
En ce moment je m'amuse à codes des petites choses en Php pour progresser et j'ai donc une question.
Peut-on stocker des opérateur ('+', '-','/' et '*') dans une variable pour effectuer une opération plus tard. Je montre en code ce que ça donne :  
 

Citation :

$a = 1;
$b = 1;
$c = '+';
$d = $a.$c.$b;
echo $d;


 
J'aimerais que $d soit le résultat de l'opération, soit 2. Or, il considere $c comme un élément string et donc plus comme un signe opératoire. Il m'affiche donc l'opération 1+1.
Il y a t il un moyen pour convertir $c afin qu'il soit pris en compte comme un opérateur ou est-ce tout simplement pas possible ?
 
 
ps : c'est juste par curiosité et que j'ai soif d'apprendre :)


Message édité par kl14582 le 06-04-2008 à 01:03:45
Reply

Marsh Posté le 05-04-2008 à 21:07:21   

Reply

Marsh Posté le 05-04-2008 à 21:14:18    

héhé je ne vois pas l'utilité mais ça reste une bonne question quand meme :)
 
donc moi je pense à 2 choses qui peuvent solutionner le probleme :
faire $d = (int) $a.$c.$b; ou echo (int) $d
et si ça marche pas je pense a eval
et si ça marche, ban je ne sais pas :)


Message édité par naeh le 05-04-2008 à 21:15:32
Reply

Marsh Posté le 05-04-2008 à 21:44:19    

Pour l'utilité, je voulais faire quelque chose du genre :  
 

Citation :

$a = 1;
$b = 1;
$signe = '+-/*';
$i=0;
 
for($i;$i<=3;$i++){
$d = $a.$signe[$i].$b;
echo $d;
}


 
Je trouvais ça facile et très court mais ca ne marche pas  :pt1cable:  
 
Ta 1ere solution ne fonctionne pas.  Je les avait déjà testé en vain.
Ta 2ème solution ne marche pas non plus. Pourtant, quand je regarde la doc php, cette fonction devrait résoudre ce problème. Je vais continuer mes recherches même si ça ne sert peut être à rien, je suis curieux ^^


Message édité par kl14582 le 05-04-2008 à 21:45:02
Reply

Marsh Posté le 05-04-2008 à 21:55:04    

$d = eval( $a.$c.$b)
(plus court , et en plus ca marche )


Message édité par flo850 le 05-04-2008 à 21:55:18

---------------

Reply

Marsh Posté le 05-04-2008 à 22:15:34    

bizarrement, ça ne marche pas :  
 
$a = 1;
$b = 1;
$c = '+';
$d = eval($a.$c.$b);
echo $d;
 
erreur :  
Parse error: parse error, unexpected $end in C:_blabla.php(15) : eval()'d code on line 1
 
Si je met "<?php" ) la 1ere ligne, j'ai l'erreur précédente. Sinon je met "<?" et là, ca m'écrit tout mon code (et ne l'execute pas)...

Reply

Marsh Posté le 05-04-2008 à 22:18:56    

pour que ca fonctionne avec <? au lieu de <?php, il faut activer les short tag sur le serveur ( config de php.ini )  
essaye ca  
 
 
$d = eval($a.$c.$b.';');  


---------------

Reply

Marsh Posté le 05-04-2008 à 23:20:23    

J'ai lu et relu la doc php sur eval() mais au final, ça ne me retourne rien. Le '+' n'est pas interprété même avec la fonction eval()
 
Ps : merci pour la précision sur les short open tag, je le savais en plus mais j'étais pas sur le même pc ^^


Message édité par kl14582 le 05-04-2008 à 23:21:23
Reply

Marsh Posté le 05-04-2008 à 23:29:46    

il se passe quoi quand tu fait eval('1+1;'); ?


---------------

Reply

Marsh Posté le 05-04-2008 à 23:39:17    

Ca ne retourne rien justement. Cette fonction n'interprète pas ce genre d'opération visiblement.

Reply

Marsh Posté le 06-04-2008 à 00:35:53    

Code :
  1. $a = 1;
  2. $b = 3;
  3. $op = '+';
  4. eval ('$c = $a '.$op.' $b;');
  5. echo $c; // 4


Message édité par art_dupond le 06-04-2008 à 00:38:34

---------------
oui oui
Reply

Marsh Posté le 06-04-2008 à 00:35:53   

Reply

Marsh Posté le 06-04-2008 à 01:01:55    

Ah ben voilà, c'est possible cette affaire. Je pensais avoir fait le tour sur l'utilisation de cette fonction mais keneni.
 
Merci Art_dupond, je me coucherais moins bête ce soir. Et merci à Naeh et Flo850 d'avoir consacré quelques minutes à mon interrogation. :)
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed