Sujets associés : PHP son Astuces encore PHP... PHP trop optimisation si eval pour (Astuce) PHP – alternative à eval, comment et pourquoi s’en passer ? car alternatives eval avec PHP mais sécurité au (Astuce) PHP – alternative à eval, comment et pourquoi s’en passer ? et fonctions si Astuces ou performances ou fonctions. (Astuce) PHP – alternative à eval, comment et pourquoi s’en passer ? depuis performances et compatibilité la eval ta PHP tellement fonctions. Sécurité aux sécurité, PHP sur eval sur performances son alternatives eval ici Astuces son eval ni performances si compatibilité juste optimisation or PHP sa optimisation... PHP, optimisation depuis alternatives eval ni sécurité, (Astuce) PHP – alternative à eval, comment et pourquoi s’en passer ? sa Astuces encore fonctions, compatibilité.

(Astuce) PHP – alternative à eval, comment et pourquoi s’en passer ?

Tout le monde le sait, utiliser la fonction eval de PHP, c’est le mal :devil: ! Mais savez-vous pourquoi ? Et comment peut-on faire pour remplacer cette fonction avec d’autres méthodes ?

Cet article aura pour but de recenser les alternatives à eval et se veut être exhaustif à force de modifications et de contributions, j’ai donc besoin de votre aide :P .

3 raisons de ne pas utiliser eval

1) Risque d’insertion de code

Étant donné que c’est une chaine qui va être exécutée par PHP, il se peut que, d’une manière ou d’une autre, une personne mal intentionnée puisse insérer du code dans votre eval. Il suffit d’une simple configuration spécifique au niveau du serveur comme « register_globals » pour qu’une variable puisse être modifiée par un utilisateur, ce qui se répercutera sur votre eval :/ .

2) Un suivi des erreurs difficile

Vu que votre code est exécuté par une fonction et non directement par le moteur PHP, une « parse error » ou tout autre erreur de syntaxe sera beaucoup plus difficile à traiter et à corriger, surtout si votre chaine exécutée dans eval devient volumineuse.

3) Une fonction (trop) particulière

En suivant l’actualité du langage PHP, on remarque que la communauté des développeurs travaillent de plus en plus sur la pré-compilation du code PHP afin d’accroître la rapidité d’exécution des scripts (par exemple Facebook avec HipHop). Or, la fonction eval n’est plus supportée par ces systèmes. En pariant sur l’avenir, il est probable (je dis bien « probable ») que cette fonction soit peu à peu abandonnée.

Les alternatives pour remplacer eval

Modification d’une variable avec un nom variable

Parfois, on doit modifier une variable dont on ne connait pas le nom. En utilisant eval, on peut créer une chaine qui génère dynamiquement le nom de la variable à partir du contenu d’une autre (Oui, oui :P ). Cependant, sans eval, c’est aussi possible :) ! Pour cela il suffit de faire :

// Variable dont on ne connait pas le nom
$article = "test";

// Le nom de la variable est stocké dans celle-ci
$nomDeLaVariable = "article";

// On va modifier la variable qui a un nom variable
$$nomDeLaVariable = "test2";

// On affiche le resultat : "test2" !
echo $article;

Effectivement, en utilisant un double dollar « $$ », on remplace le nom de la variable par le contenu de la variable « nomDeLaVariable ».

Appel d’une fonction avec un nom variable

Tout comme le point précédent, on va utiliser une méthode relativement similaire ; voici l’exemple :

// Définition d'une fonction avec un nom que l'on ne connait pas
function plop() {
	echo "test";
}

// Nom de la fonction stockée dans cette variable
$nomDeLaFonction = "plop";

// Appel de la fonction avec le nom stocké dans $nomDeLaFonction
$nomDeLaFonction();

Et voilà ! La fonction « plop() » sera exécutée ! Il faut savoir qu’il vous est aussi possible d’utiliser call_user_func de php. Vous pouvez aussi consulter call-user-func-array pour manipuler plus facilement les paramètres à envoyer à votre fonction.

Créer une instance d’une classe avec un nom variable

Comme pour les deux points précédents, vous pouvez faire :

$Objet = new $nomObjet();