eval

Eléphant du PHP | 453 Messages

01 mai 2010, 09:42

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.
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

ViPHP
ViPHP | 1136 Messages

01 mai 2010, 10:06

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.

ViPHP
ViPHP | 3300 Messages

01 mai 2010, 19:45

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
Fait du php depuis que ca existe ou presque :)

ViPHP
ViPHP | 1136 Messages

01 mai 2010, 21:52

Arf ... 8-|

Pourquoi et comment faire dans ce cas ?

ViPHP
ViPHP | 3300 Messages

02 mai 2010, 09:29

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 :)
Fait du php depuis que ca existe ou presque :)

ViPHP
ViPHP | 1136 Messages

02 mai 2010, 09:38

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.

ViPHP
ViPHP | 3300 Messages

02 mai 2010, 19:40

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
Fait du php depuis que ca existe ou presque :)

Eléphant du PHP | 453 Messages

02 mai 2010, 23:55

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 ^^
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

ViPHP
ViPHP | 1136 Messages

03 mai 2010, 07:52

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 ...