EXÉCUTER UNE FONCTION SI C'EN EST UNE

Messages postés
187
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
21 janvier 2008
- - Dernière réponse : malik7934
Messages postés
1162
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
- 23 août 2005 à 09:46
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/33341-executer-une-fonction-si-c-en-est-une

malik7934
Messages postés
1162
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
2 -
Hehe, en reflechissant, j'ai quand meme compris ce qui coincait avec eval...
<?php
$fct1 = "bonjour les amis";
eval( "\$fct1 = $fct1;" );
echo $fct1;
?>
ca, ca va donner une erreur (parse error, unexpected T_STRING). Bien sur $fct1 = "'bonjour les amis'" est la solution mais dans le cas present, celui qui m'a demande la fct ne peux pas changer le contenu de la base de donnees...
GiUsTiNo
Messages postés
129
Date d'inscription
lundi 26 avril 2004
Statut
Membre
Dernière intervention
30 juin 2012
-
le plus facile est de mettre directement le code php dans la fonction eval() pour pas chipoter avec les slash/guillemets... Personnelement, j'ai utilisé cette technique, mes pages étant en base de données, je les récupérais avec eval() (si code php il y avait => avec le html, cela retourne une erreur, bien sur :p)

Bonne continuation
malik7934
Messages postés
1162
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
2 -
J'ai testé tes deux propositions. La deuxième retourne une erreur, mais la première va:

$fct1 = "strrev('bonjour les amis')";
eval( "\$fct1 = $fct1;" );
echo $fct1;

cela donne bien "sima sel ruojnob"... well... je crois bien que je l'ai dans l'os!

Ben voilà, touché coulé le malik7934!
cs_Elektordi
Messages postés
187
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
21 janvier 2008
-
Oui, j'ai déjà utilisé eval...

Et si tu enlevait les guillemets:

eval( "\$fct1 = $fct1;" );
ou
eval( "\$fct1 = ".$fct1.";" );

Quand au $name, c'est car ds ta fonction tu as rajouté "if (count($sep[0]) == 1) echo $param;", mais bon ca peut s'arranger tout en utilisant eval!
malik7934
Messages postés
1162
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
2 -
Nah, pas d'accord, primo eval($name) par exemple va te retourner une erreur, ensuite si je me fie à l'exemple sur php.net:

<?php

$name = "bonjour les amis";
eval( "\$name = "$name";" );
echo $name;
echo '
';

$string = "fctperso('bonjour les amis')";
eval( "\$tring = "$string";" );
echo $string;
echo '
';

$fct1 = "strrev('bonjour les amis')";
eval( "\$fct1 = "$fct1";" );
echo $fct1;
echo '
';
echo '
';

$fct2 = "pow(2, 8)";
eval( "\$fct2 = "$fct2";" );
echo $fct2;
echo '
';

?>
va me donner
bonjour les amis
fctperso('bonjour les amis')
strrev('bonjour les amis')
pow(2, 8)

et non pas le résultat des fonctions.
Hehe... j'avais d'ailleurs commencé par essayer avec eval... t'as essayé ce que tu disais avant de poster? Peut-être que je ne sais pas employer eval de la bonne manière...
cs_Elektordi
Messages postés
187
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
21 janvier 2008
-
>Voilà... et le premier qui me sort le même code en 2 lignes, je le frappe ;)

Dommage... Voila le même code en UNE ligne !!!

$name = "bonjour les amis"; -> eval($name): bonjour les amis
$string = "fctperso('bonjour les amis')"; -> eval($string): Vous avez écrit bonjour les amis
$fct1 = "strrev('bonjour les amis')"; -> eval($fct1): sima sel ruojnob
$fct2 = "pow(2, 8)"; -> eval($fct1): 256

Plus d'infos: http://www.nexen.net/docs/php/annotee/function.eval.php