PHP : Passage de code php dans une variable

Résolu
Bonjour à tous,

J'aimerai passer du code php php comme argument d'une fonction existante c'est-à-dire :

function faireUnTest($codeDuTest) {
if(interpréter_le_contenu_de_la_variable_comme_code_php($codeDuTest)){
(...)
}
}


Par exemple

faireUnTest("1+1==2") ;


Doit donner le même résultat que :

if(1+1==2){
(...)
}
}


Merci beaucoup !!!!
Configuration: Windows 7
Firefox 3.5.5

5 réponses

  1. Bonjour

    Ton premier code était presque bon, juanou :
    <?php
    function faireuntest ($test) {
       if ( eval("return(".$test.");") ) echo 'ok';
       else echo 'pas ok';
    }
    faireuntest( "5+5===10" );
    ?>
    1
    1. Tu as essayé avec eval ? (https://www.php.net/manual/fr/function.eval.php

      <?php
      
      function faireuntest ($test) {
         if ( eval($test) ) echo 'ok';
         else echo 'pas ok';
      }
      
      faireuntest( "5+5===10" );
      
      ?>


      Si mon code fonctionne, ça devrait afficher "ok".

      ps : attention toutefois avec eval. On recommande souvent de ne pas y avoir recours. On dit même que "eval is evil" !
      0
      1. Résultat :

        Parse error: syntax error, unexpected $end in /home/_____/public_html/_____/_____/Php/_____/_____/_____.php(4) : eval()'d code on line _____
        pas ok
        0
        1. ah... mince...

          Mais j'ai trouvé autre chose.
          Ca fait un peu bidouille mais ça a l'air de marcher :

          <?php
          $i = 0;
          function faireuntest ($test) {
             global $i;
             eval( 'function tmp'.$i.'() {return '.$test.';}; $tmp = tmp'.$i.'();' );
             if ( $tmp ) echo "ok<br />";
             else echo "pas ok<br />";
             $i++;
          }
          
          faireuntest("3+3==6");
          faireuntest("3+3==7");
          
          ?>


          ça devrait afficher :
          ok
          pas ok
          0
          1. MERCI BEAUCOUP JUANOU ET LE PÈRE POUR CES TROIS CODES !!!!

            Ca m'a bien fait avancer !
            0