OVH Cloud OVH Cloud

Probleme avec eval()

10 réponses
Avatar
Zouplaz
Bonjour, j'ai besoin d'appeller telle ou telle fonction membre avec la
fonction eval()

ex.

function repostForm($action,$errmsg,$add_form_fnname = "adm_form")
{
$call = '$this->' . $add_form_fnname . "(\"$action\",$_POST,\"$errmsg
\");";
echo $call;
$res = eval($call);
echo "Res=$res";
}


Mais il ne se passe rien - $res ne contient rien, la méthode "adm_form" de
$this n'est pas appellée - aucune erreur d'exécution


Possible ou pas ?


Merci

10 réponses

Avatar
Marc Quinton
Zouplaz wrote:

Mais il ne se passe rien - $res ne contient rien, la méthode "adm_form" de
$this n'est pas appellée - aucune erreur d'exécution


Possible ou pas ?


* oui certainement possible.
* tu penses qu'il ne se passe rien parce que ce que tu attends est différent
de ce qu'il se passe en réalité.
* $res est l'etat de l'exection du script passé en argument, pas son resultat.
* donc il vaut mieux ecrire :

$status = eval ('$foobar = "hello" ; $pi = 3.14');
if($status === false)
echo "errreur";
if($status == NULL)
echo "il y a eu un return dans eval";

Avatar
bruno
j'ai pas bien compris la fonction eval, et sa syntaxe, mais, pourquoi
t'a des parenthese dans $call??

si j'ai bien comprs, les "$var" dans ta chaine doivent etre remplacées
par leur vrai valeur!?

si c'est ca : pourquoi ne pas ecrire : {$var}?? ca marche bien et c'est
plus simple...

et ton $_POST... tu doit pas mettre un ['toto'] derriere :
$_POST['toto'] ???
Avatar
Marc Quinton
Marc Quinton wrote:

Mais il ne se passe rien - $res ne contient rien, la méthode
"adm_form" de $this n'est pas appellée - aucune erreur d'exécution




un petit test d'illusration qui montre comment cela marche en 00 :

<?php

class test {

var $member = 123;

function method($a){
$this->member=$a;
}

function test_eval(){

$code = '$this->method("abc");';
# $code = 'print_r($this);';
# $code = '$a = 123;';
eval($code);
}
}

$obj = new Test();
$obj->test_eval();

print_r($obj); # -> sort $member = abc, ce qui semble juste


?>


> php -q eval-oo.php
test Object
(
[member] => abc
)


Avatar
Zouplaz
"bruno" wrote in news:1122886843.264871.269110
@g43g2000cwa.googlegroups.com:

j'ai pas bien compris la fonction eval, et sa syntaxe, mais, pourquoi
t'a des parenthese dans $call??


Parce que la fonction que je veux appeller attend des paramètres...


si j'ai bien comprs, les "$var" dans ta chaine doivent etre remplacées
par leur vrai valeur!?

si c'est ca : pourquoi ne pas ecrire : {$var}?? ca marche bien et c'est
plus simple...


Pour une variable simple je vois pas l'utilité - j'écris simplement $var au
lieu de {$var}, syntaxe dont je me sers lorsque je veux accéder à un
tableau indicé ou une variable membre d'une classe...


et ton $_POST... tu doit pas mettre un ['toto'] derriere :
$_POST['toto'] ???


Non, je passe le tableau entier - pas un de ses éléments - et $_POST est un
tableau comme un autre

Avatar
bruno
ce que je veut de dire, c'est que tu peut tres bien appeler une
fonction en faisant :

{$add_form_fnname} ($action,$_POST,$errmsg );
...
et ca me semble plus simple non?

http://fr.php.net/manual/fr/functions.variable-functions.php
Avatar
Zouplaz
Bon à priori il n'y a pas de raison que ça ne fonctionne pas, peut-être que
les "echos" de ma fonction ne partent pas là ou il faudrait ?
Avatar
Zouplaz
"bruno" wrote in news:1122963523.011571.98550
@g47g2000cwa.googlegroups.com:

ce que je veut de dire, c'est que tu peut tres bien appeler une
fonction en faisant :

{$add_form_fnname} ($action,$_POST,$errmsg );
...
et ca me semble plus simple non?

http://fr.php.net/manual/fr/functions.variable-functions.php


Chez moi cette syntaxe ne fonctionne pas - erreur de syntaxe. et puis ça
n'appellerait pas une fonction membre...

Par contre

$this->$add_form_fnname($action,$_POST,$errmsg);

donne le résultat attendu...

Problème réglé, ouf !

Avatar
bruno
Avatar
Marc Quinton
Zouplaz wrote:
Bon à priori il n'y a pas de raison que ça ne fonctionne pas, peut-être que
les "echos" de ma fonction ne partent pas là ou il faudrait ?


attention : ne pas penser que les echos dans un eval vont
te permettre d'assigner des variables ; ex :

$toto = eval('echo "123"');

tu n'auras jamais $toto egal a 123.

Avatar
Marc Quinton
Zouplaz wrote:

$this->$add_form_fnname($action,$_POST,$errmsg);

donne le résultat attendu...

Problème réglé, ouf !


la prochaine explique ce que tu veux faire et pas le comment
tu veux le faire. Donc l'eval ne sert a rien dans cette affaire.