Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/10/2011, 10h24   #1
Membre du Club
 
Inscription : avril 2011
Messages : 91
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 91
Points : 40
Points : 40
Par défaut Forcer le calcul d'une ligne

Bonjour.

Je récupère de ma BDD des infos d'un objet. Je récupère entre autres un signe et une valeur.
A l'aide d'une valeur $x je dois faire un calcul avec toutes ces informations.

Exemple :
$x = 40;
$signe = $objet->signe;
$valeur = $objet->valeur;

J'aimerais pouvoir faire :
$resultat = $x . $signe . $valeur;

Si je fais un var_dump de $resultat j'ai ça :
string '40+50' (length=5)

Existe-t-il un moyen de forcer le calcul ou dois-je faire une condition sur le signe ?

Merci.
p4ndore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 10h56   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
eval ?

Code :
1
2
3
4
5
$resultat = eval("return $x $signe $valeur;");
# ou
eval("\$resultat = $x $signe $valeur;");
 
var_dump($resultat);
(mais attention à ce que ça implique)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 11h02   #3
Membre du Club
 
Inscription : avril 2011
Messages : 91
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 91
Points : 40
Points : 40
Ça marche impec merci

Qu'entends-tu par "ce que ça implique" ?
p4ndore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 13h31   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
Citation:
Envoyé par p4ndore Voir le message
Ça marche impec merci

Qu'entends-tu par "ce que ça implique" ?
Eval est assez dangereux car il permet une manipulation directe de tout ce qui se trouve dans le scope courant. Si la chaine à évaluer est produite depuis des données utilisateur ou depuis la base (ce qui revient au même), cela peut introduire des failles de sécurités conséquentes.

Donc plutôt qu'un eval, je verrai mieux une fonction lambda:
Code :
1
2
3
4
5
6
7
$signe = "*";
$valeur= 3;
 
$func = create_function('$x', "return \$x {$signe} {$valeur}; ");
 
// appel
$func(2);
Citation:
Existe-t-il un moyen de forcer le calcul ou dois-je faire une condition sur le signe ?
Pour ma part, je pense qu'un switch sur le signe serait dans tous les cas la meilleure solution. Eval ne doit être envisagé que s'il n'existe aucun autre moyen d'arriver à faire ce que l'on veut et les fonctions lambda sont normalement là pour mettre en place des mécanismes de callbacks ou de délégation.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 13h34   #5
Membre du Club
 
Inscription : avril 2011
Messages : 91
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 91
Points : 40
Points : 40
Ouais donc du coup je vais préférer une structure conditionnelle je pense.

Merci pour tout en tout cas
p4ndore est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h06.


 
 
 
 
Partenaires

Hébergement Web