Page 1 sur 1

eval

Posté : 01 mai 2010, 09:42
par niuxe
Et l'eau tout le monde,

Je suis en train de créer le moteur de mon application. Cependant, je me pose une question suite à une ligne de code.
Bien que les deux lignes fonctionnent en local, je me demande laquelle est préférable (sécurité/compatibilité) ?
eval ("\$instance = new $objet();");
ou plus simplement :
$instance = new $objet();
Par avance, merci de vous pencher sur mon petit soucis.

Bonne journée à vous.

Re: eval

Posté : 01 mai 2010, 10:06
par stopher
Slt ,

tout simplement :
$instance = new $$objet();
pour expliquer , si $objet a pour valeur : "Maclasse" , celà reviendra à faire
$instance = new Maclasse();
eval() est à bannir tant que tu peux ..

Ch.

Re: eval

Posté : 01 mai 2010, 19:45
par Nagol
Slt ,

tout simplement :
$instance = new $$objet();
pour expliquer , si $objet a pour valeur : "Maclasse" , celà reviendra à faire
$instance = new Maclasse();
eval() est à bannir tant que tu peux ..

Ch.
et les $$ tout autant, quoi que tu veuilles faire, ca n'est certainement pas la bonne manière

Posté : 01 mai 2010, 21:52
par stopher
Arf ... 8-|

Pourquoi et comment faire dans ce cas ?

Re:

Posté : 02 mai 2010, 09:29
par Nagol
Arf ... 8-|

Pourquoi et comment faire dans ce cas ?
pourquoi:

Parceque $$ ca revient à faire <insert bug here>, c'est trés facile de ne pas avoir sa variable déclarée correctement, de plus c'est peu lisible quand on revient farfouiller dans ce genre de codes des mois plus tard on se mord les doigts d'avoir codé ça comme ça :)

Comment faire:

un array, des issets, mais ca dépend de son besoin qui est pas super évident au vu du premier post :)

Re: eval

Posté : 02 mai 2010, 09:38
par stopher
Ok je vois ,

Disons donc qu'il faut tester d'une maniére ou d'une autre cette variable , afin d'éviter les bugs possibles , par exemple , dans son cas , ( instancier un classe dont le nom est variable ) , une vérification auparavant avec class_exists() me semble correcte .
qu'en penses tu ?

ch.

Re: eval

Posté : 02 mai 2010, 19:40
par Nagol
oui le plus correct c'est un truc du genre:
if(class_exists($class)) {
	$obj = new $class();
}
d'ailleurs en fait pourquoi on parle de $$ ca marche pas dans son cas

Re: eval

Posté : 02 mai 2010, 23:55
par niuxe
Et l'eau,

C'est bien ce qu'il me semblait qu'il vaut mieux éviter le eval. Merci Stopher. Tu confirmes ce que je pensais. Néanmoins, lorsque j'ai écrit cette ligne de code, j'ai eu un doute.
d'ailleurs en fait pourquoi on parle de $$ ca marche pas dans son cas
Ce week end, je n'ai pas eu trop le temps de me replonger dans le code (erf, un petit visuel sous Inkscape). Lorsque j'ai lu le principe de variable variable, je me suis demandé si ça aller fonctionner ou trouver une astuce pour arriver au même résultat.

Egalement, merci Nagol pour ton intervention. Cependant, je ne prendrais pas ta méthodologie puisque en amont dans mon code je fais une vérification sur le fichier en lui même. S'il ne trouve pas -> exception. Aussi, s'il ne trouve pas une méthode dans le fichier pointé (if(!methode_exists($instance,$method)...) -> Exception. Ma peur était est ce que ce genre de code est/sera compatible. Apparemment, c'est le cas.

En tout cas un grand merci à vous deux. Au plaisir de vous lire ^^

Re: eval

Posté : 03 mai 2010, 07:52
par stopher
d'ailleurs en fait pourquoi on parle de $$ ca marche pas dans son cas
Exacte :oops: , c'est une erreur de ma part .. :-)

Me suis un peu .. ( Beaucoup ) mélangé les pinceaux ...