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 :

exeption attribut non defini


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 12
    Points
    12
    Par défaut exeption attribut non defini
    Bonjour
    Je souhaiterai détecter et personnaliser une erreur dans mes script en utilisant les exeptions, mais cela ne marche pas très bien...
    L'idée est simple : je veux être sur que l'attribut ayant pour valeur "$changement" existe.
    J'ai donc pensé faire la chose suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try {
    $vieuxValeur = $this->vieux->$changement ;
    }
    catch (Exception $e) {
    	echo'aaaaaaaaaaa Une erreur !!' ;
    }
    php rigole et ne prend pas en compte l'exeption.
    Il affiche cependant bien :
    "Notice: Undefined property: stdClass::$attributInexistant in ....."

    Pourquoi ?
    Merci d'avance !

  2. #2
    FoxLeRenard
    Invité(e)
    Par défaut
    Sans doute a cause de cela
    http://bugs.php.net/bug.php?id=24499

  3. #3
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    En fait non, c'est le comportement normal de php: il n'y a pas d'exception de lancée quand on tente d'accéder à une propriété qui n'existe pas. php affiche juste une notice (qui n'est pas un message d'erreur).

    Pour recevoir une exception, il faut la lancer manuellement. La méthode __get() permet de faire ça: elle est appelée automatiquement par php quand on tente d'accéder à une propriété qui n'existe pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class a {
      public $b = 1;
     
      public function __get($name) {
        throw new Exception("undefined property $name");
      }
     
    }
     
    $a = new a;
    echo $a->b; // affiche 1
    echo $a->c; // lance une exception

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    super merci pour l'explication !
    Cependant c'est un petit peu étrange je trouve, il faudrait que cela lance une erreur et pas une notice, je trouve !

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

Discussions similaires

  1. [CLASSES] Attributs non-static apparemment considérés comme static ?
    Par Lideln dans le forum ActionScript 1 & ActionScript 2
    Réponses: 6
    Dernier message: 02/07/2006, 20h36
  2. UCase : Fonction non définie
    Par tane dans le forum IHM
    Réponses: 5
    Dernier message: 12/06/2006, 19h57
  3. Réponses: 2
    Dernier message: 16/05/2006, 13h44
  4. [VBA] MsgBox non definie
    Par coco21 dans le forum Access
    Réponses: 3
    Dernier message: 15/12/2005, 10h05
  5. Une fonction avec des attributs non obligatoires
    Par YanK dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2002, 13h39

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