IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

alternative au eval()


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut alternative au eval()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    class MaClasse
    {
    	private $variables = array();
     
    	/**
    	* ajoute des variables au tableau variables de l'objet courant
    	* si le paramètre variable est un tableau on le fusionne
    	* avec le tableau de la classe (si nouvelles valeurs elles
    	* remplacent les précédentes)
    	* si le paramètre variable est une chaîne, on ajoute cette dimension
    	* au tableau de la classe et sa valeur est le paramètre valeur
    	* (cette valeur peut être un tableau...)
    	* si la dimension existe déjà, la nouvelle valeur remplace
    	* la précédente
    	*/
    	public function ajouteVariable($variable, $valeur='')
    	{
    		//$this->trace->ajoute();
    		if(is_array($variable))
    			$this->variables = array_merge($this->variables, $variable);
    		else
    			$this->variables[$variable] = $valeur;
    	}
     
    	/**
    	* retourne la valeur d'une variable stockée dans l'objet
    	* (si la variable existe sinon renvoie rien)
    	* portant le nom passé en paramètre
    	* si plusieurs paramètres retourne la valeur du tableau
    	* $this->variables['param1']['param2']['param3']....
    	* La valeur retournée peut être un tableau
    	*/
    	public function donneVariable()
    	{
    		//$this->trace->ajoute();
    		if(func_num_args()!=0)
    		{
    			$tab = 'this->variables';
    			for($i=0;$i<func_num_args();$i++)
    			{
    				$tab .= "['".func_get_arg($i)."']";
    			}
     
    			if(eval("return isset(\$$tab);"))
    			{
    				return eval("return \$$tab;");
    			}
    		}
    	}
     
    }
    Ce code fonctionne, mais j'aimerais trouver une alternative à l'utilisation de la fonction eval() qui fait chuter les performances...
    Quelqu'un a une idée ?

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
             $ret = null;
             if (isset($this->variables[func_get_arg(0)])) 
             {
                ret = $this->variables[func_get_arg(0)];
             }
             $i = 1;
             while ($i < func_num_args() && $ret)
             {
                if (isset($ret[func_get_arg($i)])) 
                {
                   $ret = $ret[func_get_arg($i)];
                } else {
                   $ret = null;
                }
                $i++;
             }
             return $ret;

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 2
    Points : 2
    Points
    2

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $ret = null;
             if (isset($this->variables[func_get_arg(0)]))
             {
                ret = $this->variables[func_get_arg(0)];
             }
             $i = 1;
             while ($i < func_num_args() && $ret)
             {
                if (isset($ret[func_get_arg($i)]))
                {
                   $ret = $ret[func_get_arg($i)];
                } else {
                   $ret = null;
                }
                $i++;
             }
             return $ret;
    MERCI C'EST EXACTEMENT CE QU'IL ME FALLAIT !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Alternative Stable pour eval
    Par abdego dans le forum jQuery
    Réponses: 4
    Dernier message: 05/05/2015, 17h57
  2. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  3. [Templates] Alternative phpBB sans Eval
    Par comode dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 16/10/2012, 19h14
  4. Réponses: 0
    Dernier message: 09/03/2010, 17h16
  5. [FORMATION] Formations par alternance
    Par chobol dans le forum Etudes
    Réponses: 10
    Dernier message: 20/02/2004, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo