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 :

Eval Try Catch [PHP 5.4]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 15
    Par défaut Eval Try Catch
    Bonjour,

    J'ai ce bout de code que j'ai copié depuis un sujet résolu et que j'ai arrangé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try {
    	if(!@eval($expr))
    		throw new exception('parse error on $expr with eval');
    } catch(Exception $e) {
    	return false;
    }
    Le but est :
    - quand la fonction eval fonctionne, ne rentre pas dans le catch;
    - sinon, rentres-y.

    Le souci, c'est que le script rentre tout le temps dans catch. Comme je ne connais pas le fonctionnement du @, j'ai du mal a percer l'erreur du code.

    Donc, si quelqu'un aurait la gentillesse de m'éclairer...
    Merci !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Le @ sert a cacher les erreurs.
    Mais je ne pense pas que ton problème vienne de là : eval() ne retourne pas d'erreurs quand le code n'est pas bon, juste FALSE.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 15
    Par défaut
    Déjà merci pour l'explication du @.

    Je viens de découvrir que eval renvoie null s'il n'y a pas d'erreur, et false effectivement s'il y en a.

    Du coup l'idée serait de différencier null et false. Pas terrible mais je vais tester...

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Pour differencier :
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 15
    Par défaut
    Pas mal du tout ! Merci

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    @eval() = satan² !

    Si vraiment (c'est à dire, contraint sous la menace avec un flingue dans la bouche et deux kilos de C4 à la ceinture) on te force à utiliser eval(), la meilleure façon de procéder serait selon moi la suivante:

    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
    set_error_handler(function () use (& $err) {
        // on va éviter d'avoir les erreurs qui "remontent"
        $err = true;
    });
     
    try {
        $err = false;
        $res = eval($foobar); // attention $res peut contenir la valeur de return dans l'eval
     
        if ($err)
            throw new EvalErrorException($foobar);
    }
    catch (EvalErrorException $e) {
        // une erreur s'est produite dans l'eval
    }
    catch (Exception $e) {
        // une exception s'est produite dans l'eval
    }
     
    restore_error_handler();

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

Discussions similaires

  1. Problème avec eval et try/catch
    Par kracter56 dans le forum MATLAB
    Réponses: 1
    Dernier message: 20/11/2012, 06h46
  2. __try __finally et try catch
    Par buzzz dans le forum C++
    Réponses: 6
    Dernier message: 19/02/2005, 15h31
  3. [debutant sous eclipse] surround with try catch
    Par Alwin dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 26/06/2004, 20h03
  4. [try-catch] relancer les instruction du bloc try
    Par nounou dans le forum Langage
    Réponses: 11
    Dernier message: 12/05/2004, 11h23
  5. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35

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