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 :

[POO] php5: myException extends exception


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut [POO] php5: myException extends exception
    Bonjour à tous,
    Voilà, j'ai lu le tuto suivant: http://guillaume-affringue.developpe...?page=sommaire

    Mais j'ai un peu modifier ma class MyPHPException.
    Lorsque je l'utilise sur une fonction de php, tout fonctionne correctement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    require_once('erreur.class.php5');
    try {
        mysql('serveurBidon', 'LoginBidon', 'MDPBidon');
    }
    catch (MyPHPException $myPHPException) {
        echo $myPHPException->showError();
    }
    ?>
    L'exception fonctionne.

    Si maintenant je fait:
    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
    <?php
    require_once('erreur.class.php5');
    function test($param1){
    	if ($param1 != 2){
    			throw new Exception('test');
    	}
    	else { 
    		return print('C\'est 2!');
    	}
    }
     
    try {
        test(1);
    }
    catch (MyPHPException $myPHPException) {
        echo $myPHPException->showError();
    }
    ?>
    J'ai le message d'erreur suivant:
    Fatal error: Uncaught exception 'Exception' with message 'test' in /home.10/mendrock/www/new/class/class/erreur.php5:5 Stack trace: #0 /home.10/mendrock/www/new/class/class/erreur.php5(13): test(3) #1 {main} thrown in /home.10/mendrock/www/new/class/class/erreur.php5 on line 5
    Pouvez vous m'aidez?
    Avez-vous besoin de la classe "myPHPException" ?

    Merci d'avance.

  2. #2
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2006
    Messages : 317
    Par défaut
    C'est tout simple.

    Le Exception et MyPHPException sont 2 exceptions différentes.
    Ton code doit attraper Exception et non pas MyPHPException.

    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
     
    <?php
    require_once('erreur.class.php5');
    function test($param1){
    	if ($param1 != 2){
    			throw new Exception('test');
    	}
    	else { 
    		return print('C\'est 2!');
    	}
    }
     
    try {
        test(1);
    }
    catch (Exception $e) {
        echo $e->showError();
    }
    ?>
    ou

    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
    <?php
    require_once('erreur.class.php5');
    function test($param1){
    	if ($param1 != 2){
    			throw new MyPHPException ('test');
    	}
    	else { 
    		return print('C\'est 2!');
    	}
    }
     
    try {
        test(1);
    }
    catch (MyPHPException $myPHPException) {
        echo $myPHPException->showError();
    }
    ?>
    Par contre, je ne comprends pas pourquoi ton premier exemple marche. ta fonction mysql renvoie t'elle une exception ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut
    Non, mais une erreure du genre 'impossible de se connecter à la base pcq serveur bidon, login bidon et mdp bidon

  4. #4
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2006
    Messages : 317
    Par défaut
    Une erreur n'est pas une exception et ne sera pas attrapé par la structure try{} catch()

    En faite les exceptions sont un mécanisme jeune en PHP. En php standart, l'interet est mineur. Elles ne sont d'ailleurs pas utilisé dans le moteur php qui renvoie des erreurs classiques (normalement ça devrait apparaitre dans PHP6, je crois).

    Par contre, elles sont utilisés dans le ZendFrameworks.

    L'interet est de pouvoir attraper une erreur pour lui appliquer un traitement special. Par exemple, ma fonction doit me renvoyer un objet rempli.
    L'objet ne peut etre crée, j'envoie une exception et plus haut, je crée un objet vide qui fera l'affaire pour la suite du traitement (ou je peux obtenir un rapport complet sur mon erreur en remontant à travers le code).

    Par si j'emploie cette fonction sur une partie critique de mon application, je vais pas renvoyer un objet vide mais la stopper en envoyant un message d'erreur.

    En faite, pour une application simple, on se contente de donner un return false; (ou un equivalent en entier si on cherche une erreur specifique).

    Les exceptions permettent de formaliser ce genre de chose et de le rendre plus compréhensible. Ca evite de retourner une chaine de caractere ou un objet quand ça marche et un nombre ou un booleen quand ça ne marche pas.

    Ca permet une applications plus carrée (exactement comme les interfaces).

  5. #5
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    En fait c'est simplement un mécanisme inhérent à la POO qu'on a implanté sur PHP, mais tous les développeurs PHP n'ont pas forcément des bases solides en POO...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut
    Avec le mysql_connect et mon excepiotn j'obtien le message suivant:

    mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'truc' (1)

    message qui est le message de l erreur... (Ce n'est pas moi qui ai écrit le texte dans la class myException)

    ---------------------------------------------------------------------------------------------------

    Maintenant, en changeant comme dit plus haut:
    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
    <?php 
    function test($param1){
    	if ($param1 != 2){
    			throw new myPhpException('test');
    	}
    	else { 
    		return print('C\'est 2!');
    	}
    }
     
    try {
        test(1);
    }
    catch (myPhpException $myPHPException) {
        echo $myPHPException->showError();
    }
    ?>]
    Il me marque un souci dans le constructeur et non pas le message "test"

    Missing argument 2 for MyPHPException::__construct(), called in /home.10/mendrock/www/new/class/class/erreur.php5 on line 5 and defined
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
        public function __construct($msg, $code, $file, $line, $context) {
            $this->message = $msg;
            $this->code = $code;
            $this->line = $line;
            $this->file = $file;
            $this->context = $context;
     
            parent::__construct($msg, $code);
        }
    ?>
    Que dois-je faire?

Discussions similaires

  1. [POO] PHP5: comment utiliser un extends ?
    Par PoichOU dans le forum Langage
    Réponses: 6
    Dernier message: 09/05/2007, 14h17
  2. [POO] PHP5 : Problème avec les classes
    Par fleur_de_rose dans le forum Langage
    Réponses: 9
    Dernier message: 06/05/2006, 19h09
  3. [POO] PHP5 et sérialisation, PDO et MySQL5
    Par sylk974 dans le forum Langage
    Réponses: 2
    Dernier message: 24/03/2006, 17h52
  4. [POO] PHP5 Objet
    Par Sylvain71 dans le forum Langage
    Réponses: 3
    Dernier message: 06/02/2006, 17h08
  5. [POO] PHP5 et Exception
    Par Royd938 dans le forum Langage
    Réponses: 2
    Dernier message: 15/12/2005, 10h44

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