Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1405 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Gestion d' "erreur" avec trigger_error() - bien/pas bien ?

n°1711487
skeye
Posté le 02-04-2008 à 11:18:40  profilanswer
 

Reprise du message précédent :

masklinn a écrit :


PHP n'a pas d'autre exception que Exception en built-in? Genre en Python il y a e.g. ValueError qui existe déjà (et plein d'autres, il y en a presque 2 douzaines), donc pour pas mal d'erreurs génériques pas besoin de se créer ses exceptions :o


 
non.[:sadnoir]


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 02-04-2008 à 11:18:40  profilanswer
 

n°1711489
art_dupond
je suis neuneu... oui oui !!
Posté le 02-04-2008 à 11:19:17  profilanswer
 

skeye a écrit :

ça donnerait plutot ça, donc, en gros:
 
 

Code :
  1. class B
  2. {
  3.   public function GetData()
  4.   {
  5.       $DB = new DB();
  6.       $DB->GetDBData(); // peut thrower une exception mais qu'on laisse remonter
  7.  
  8.       //fait autre chose
  9.  
  10.       throw new GetDataException('message',code);
  11.   }
  12. }
  13.  
  14.  
  15.  
  16. class A
  17. {
  18.    public function Manger()
  19.    {
  20.        $B = new B();
  21.        try
  22.        {
  23.           $B->GetData();
  24.        }
  25.        catch(GetDataException $e)
  26.        {
  27.           // traitement de l'exception GetData
  28.        }
  29.        catch(XYException $e){
  30.            // traitement de l'exception XY
  31.        }
  32.    }
  33. }
  34.  
  35.  
  36.  
  37. class C
  38. {
  39.    public function Boire()
  40.    {
  41.        $DB = new DB();
  42.        $DB->GetDBData(); // peut thrower une exception qu'on laisse remonter
  43.    }
  44. }


Code :
  1. try
  2. {
  3.    $A->Manger();
  4.    $C->Boire();
  5. }
  6. catch(DBException $e)
  7. {
  8.    // traitement de l'exception DB
  9. }



 :jap:  
 
 
edit: décidément, j'arrive pas à synchro mes posts avec les votres :p


---------------
oui oui
n°1711491
skeye
Posté le 02-04-2008 à 11:19:40  profilanswer
 

art_dupond a écrit :


ah oui pas bête :)
 
Encore une question :)
 
Comment faire lors de l'attrappage de l'exception, lui dire de retourner là où l'exception a été lancée et de continuer normalement ?


 
ça se fait pas, ça. D'ailleurs ça n'a pas de sens, si tu peux récupérer localement le problème, je vois pas pourquoi tu lancerais une exception! [:autobot]


---------------
Can't buy what I want because it's free -
n°1711492
masklinn
í dag viðrar vel til loftárása
Posté le 02-04-2008 à 11:19:46  profilanswer
 

art_dupond a écrit :


ah oui pas bête :)

 

Encore une question :)

 

Comment faire lors de l'attrappage de l'exception, lui dire de retourner là où l'exception a été lancée et de continuer normalement ?


C'est pas fait pour.

 

Et ça n'a pas de sens, une exception c'est pour dire qu'il y a une condition suffisament exceptionnelle pour ne pas être rattrapable localement

 

edit: bordel skeye :fou:


Message édité par masklinn le 02-04-2008 à 11:20:09

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1711496
art_dupond
je suis neuneu... oui oui !!
Posté le 02-04-2008 à 11:21:54  profilanswer
 

ah tu voulais dire autre chose par là alors ?
 

skeye a écrit :


Avec une Exception spécifique, ton bout de code qui veut faire la requête peut récupérer l'erreur, la traiter, et continuer comme si de rien n'était.:o


 
 
En fait, ça pourrait être pratique pour logger l'erreur non ?  
et aussi pour changer le comportement de l'erreur suivant les situations ?
 
 
edit : finalement il y a bien un "avantage" au trigger_error :p

Message cité 3 fois
Message édité par art_dupond le 02-04-2008 à 11:22:54

---------------
oui oui
n°1711498
masklinn
í dag viðrar vel til loftárása
Posté le 02-04-2008 à 11:22:57  profilanswer
 

art_dupond a écrit :

 


En fait, ça pourrait être pratique pour logger l'erreur non ?
et aussi pour changer le comportement de l'erreur suivant les situations ?

 


finalement il y a bien un "avantage" au trigger_error :p


wat? En quoi "ça pourrait être pratique pour logger l'erreur"? Et idem, ça veut dire quoi "changer le comportement de l'erreur suivant les situations", et en quoi c'est pas faisable avec des exceptions?


Message édité par masklinn le 02-04-2008 à 11:23:45

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1711504
skeye
Posté le 02-04-2008 à 11:26:28  profilanswer
 

art_dupond a écrit :

ah tu voulais dire autre chose par là alors ?


 
Bah...oui.
Je voulais dire que par exemple dans le bout de code plus haut A peut manger() même si B.getData() a échoué lamentablement.:D
Et ce de manière transparente pour le programme principal.
 

art_dupond a écrit :

En fait, ça pourrait être pratique pour logger l'erreur non ?  
et aussi pour changer le comportement de l'erreur suivant les situations ?


 
Le système de log est indépendant de la gestion d'erreurs, tu peux vouloir logger autre chose que des erreurs...
Pour la deuxième question j'ai pas compris ce que tu voulais dire.:D


---------------
Can't buy what I want because it's free -
n°1711505
skeye
Posté le 02-04-2008 à 11:26:57  profilanswer
 

art_dupond a écrit :

finalement il y a bien un "avantage" au trigger_error :p


non, non et non.


---------------
Can't buy what I want because it's free -
n°1711506
art_dupond
je suis neuneu... oui oui !!
Posté le 02-04-2008 à 11:27:00  profilanswer
 

masklinn a écrit :


wat? En quoi "ça pourrait être pratique pour logger l'erreur"? Et idem, ça veut dire quoi "changer le comportement de l'erreur suivant les situations", et en quoi c'est pas faisable avec des exceptions?

 


Si j'ai un module dans mon site qui ne veut pas se charger, pour moi c'est une erreur alors je lance une exception pour dire de logger l'erreur - ou d'afficher un message d'erreur suivant que je sois en prod ou pas (mais c'est pit-etre là que je fais mal les choses).
Après, comme après tout, ce n'est pas grave que le module ne s'affiche pas, je continue d'afficher le reste.
Sauf que je ne peux pas (ou pas directement) le faire avec les exceptions (si j'ai bien comprite).

Message cité 2 fois
Message édité par art_dupond le 02-04-2008 à 11:27:18

---------------
oui oui
n°1711508
skeye
Posté le 02-04-2008 à 11:27:32  profilanswer
 

art_dupond a écrit :

Si j'ai un module dans mon site qui ne veut pas se charger, pour moi c'est une erreur alors je lance une exception pour dire de logger l'erreur - ou d'afficher un message d'erreur suivant que je sois en prod ou pas (mais c'est pit-etre là que je fais mal les choses).
Après, comme après tout, ce n'est pas grave que le module ne s'affiche pas, je continue d'afficher le reste.
Sauf que je ne peux pas (ou pas directement) le faire avec les exceptions (si j'ai bien comprite).


 
bien sûr que si![:pingouino]


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 02-04-2008 à 11:27:32  profilanswer
 

n°1711509
art_dupond
je suis neuneu... oui oui !!
Posté le 02-04-2008 à 11:27:56  profilanswer
 

skeye a écrit :


non, non et non.


;)


---------------
oui oui
n°1711510
art_dupond
je suis neuneu... oui oui !!
Posté le 02-04-2008 à 11:29:07  profilanswer
 

skeye a écrit :


 
bien sûr que si![:pingouino]


 
mais vous venez de dire que non :cry:


---------------
oui oui
n°1711511
masklinn
í dag viðrar vel til loftárása
Posté le 02-04-2008 à 11:29:35  profilanswer
 

art_dupond a écrit :

Sauf que je ne peux pas (ou pas directement) le faire avec les exceptions (si j'ai bien comprite).


Ben si, suffit de mettre le try/catch juste autour de ton import de module [:petrus75]

 

Genre (en python)

Code :
  1. # om nom nom
  2. try:
  3.    import fail_module
  4. except ImportError, e:
  5.    logging.warning("Epic fail import", e)
  6. # et on continue comme si de rien n'était


 [:spamafote]

art_dupond a écrit :

 

mais vous venez de dire que non :cry:


Pas du tout, mais tu poses pas les bonnes questions


Message édité par masklinn le 02-04-2008 à 11:30:13

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1711514
skeye
Posté le 02-04-2008 à 11:31:45  profilanswer
 

art_dupond a écrit :

 

mais vous venez de dire que non :cry:

 

c'est toi qui comprends mal ce qu'on te dit ;)
La façon de faire est légèrement différente, c'est tout. Tiens, du code pour ton exemple :

 
Code :
  1. class Module{
  2.     
  3.     function __construct($id){
  4.         if($id == 'totoz'){
  5.             throw new Exception('oklol');
  6.         }
  7.     }
  8. }
  9.  
  10.  
  11. $moduleIds = array('totoz', 'dawa', 'pingouino');
  12. $modules = array();
  13. foreach($moduleIds as $id){
  14.     try{
  15.         $modules[] = new Module($id);
  16.     }
  17.     catch(Exception $e){
  18.         error_log($e.getMessage());
  19.     }
  20. }


Message édité par skeye le 02-04-2008 à 11:32:51

---------------
Can't buy what I want because it's free -
n°1711522
art_dupond
je suis neuneu... oui oui !!
Posté le 02-04-2008 à 11:44:18  profilanswer
 

[:icon3] ok ça a fait tilt :)

 

Je pensais que du coup, je ne pourrai plus centraliser la gestion de mes erreurs, mais en fait, comme je fais des classes pour les erreurs, c'est toujours "centralisé", et mieux, avec l'héritage, je peux mieux regrouper les types d'erreurs itou :)

 


Enfin bref, j'ai mis le temps, mais je pense commencer à saisir le truc :)

 


[:athome]

 

Merci BEAUCOUP :jap:

 


Skeye, ta patience est  :ouch:-ifiante :lol:  :jap:

  


Spoiler :


ps: En fait, ce que je voulais dire c'est

 

$a = 3;
throw new Exception('bof');
echo $a;

 

Mais c'est vrai que ça ne doit jamais arriver en fait :p

 

Donc c'est bon :)

Message cité 1 fois
Message édité par art_dupond le 02-04-2008 à 11:49:02

---------------
oui oui
n°1711528
skeye
Posté le 02-04-2008 à 11:53:53  profilanswer
 

art_dupond a écrit :

Skeye, ta patience est  :ouch:-ifiante :lol:  :jap:


 
Je trouve, aussi.[:petrus75]


---------------
Can't buy what I want because it's free -
n°1711628
leflos5
On est ou on est pas :)
Posté le 02-04-2008 à 14:42:12  profilanswer
 

Et bah moi je saisis toujours pas :D

n°1711676
art_dupond
je suis neuneu... oui oui !!
Posté le 02-04-2008 à 16:02:10  profilanswer
 

leflos5 a écrit :

Et bah moi je saisis toujours pas :D


mais awèteuh :sweat:  chaque fois que je re-y-réfléchis, je change d'avis :pt1cable:  
 
Là, maintenant, tout de suite (non je n'ai pas de valise), je me dis que finalement, tout ça c'est quand même un peu se compliquer la tâche pour faire un truc qui se fait tout facilement et qui correspond bien à mon utilisation.
 
Alors je pense avoir compris la "philosophie" du truc, et j'ai compris comment l'utiliser pour que ça réagisse comme j'en ai besoin...  sauf que là, sans rien faire de particulier, ça fait déjà tout ce que je demande. Alors est-ce vraiment utile de s'embêter juste pour que ce soit fait "dans les règles" ?
 
 
 
Enfin bon, je crois qu'on va tourner en rond là (et diviser par zéro si on continue trop longtemps) :o


---------------
oui oui
n°1711690
skeye
Posté le 02-04-2008 à 16:33:53  profilanswer
 

art_dupond a écrit :

Alors est-ce vraiment utile de s'embêter juste pour que ce soit fait "dans les règles" ?


 
Ne serait-ce que parce-que tu ne vas pas éternellement développer en php 4 et demi, oui.
Et tu tomberas fatalement un jour sur un cas dans lequel ça te sera utile.
 

leflos5 a écrit :

Et bah moi je saisis toujours pas :D


 
Bah toi t'es irrécupérable.:o
Regarde les bouts de code d'exemple postés.


---------------
Can't buy what I want because it's free -
n°1711859
leflos5
On est ou on est pas :)
Posté le 03-04-2008 à 05:28:38  profilanswer
 

CE que je vois pas c'est qui/quoi récupère l'exception si tu la catches pas là où elle est levée :??:
 
Du coup dans les exemples j'ai l'impression que ça vient de nul part, que je pourrais pas définir une erreur si un fichier n'existe pas, puis 2 lignes plus bas si le champ X du formulaire a mal été rempli...
 
C'est dans ce sens où j'ai du mal à voir avec vos exemples :o
 
Je comprends aussi la philosophie du truc, mais j'avoue qu'avec une fonction maison de gestion d'erreur je vois pas pour l'instant le plus appliqué à ce que je fais à savoir stopper ou non le script et afficher une erreur pour l'utilisateur.
 
J'expérimenterais quand j'aurais du temps je dois avoir mal saisis un truc tout bête :whistle:

n°1711865
masklinn
í dag viðrar vel til loftárása
Posté le 03-04-2008 à 08:16:21  profilanswer
 

leflos5 a écrit :

CE que je vois pas c'est qui/quoi récupère l'exception si tu la catches pas là où elle est levée :??:


Un try/catch qui est plus bas dans la stack d'exécution des fonctions [:spamafote]
 
Et si t'as aucun handler dans ta stack, PHP a un handler par défaut qui génère une erreur fatale.

leflos5 a écrit :

Du coup dans les exemples j'ai l'impression que ça vient de nul part, que je pourrais pas définir une erreur si un fichier n'existe pas, puis 2 lignes plus bas si le champ X du formulaire a mal été rempli...


Rien compris
 

leflos5 a écrit :

Je comprends aussi la philosophie du truc


Apparement non
 
http://docs.python.org/tut/node10.html


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1712510
bixibu
Ca ... c'est fait!
Posté le 03-04-2008 à 23:01:18  profilanswer
 

je demande l'entrée au panthéon de ce topic epic sur les exceptions PHP.. tres instructif, bien expliqué.. gg skeye en particulier ;)
 
Bref j'lais mis dans mes favoris pour quand je voudrais créer mes propres classes d'exceptions ( ca va venir :p)

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
[C#] Erreur déploiement suite changement de version VS[dumb girl asking] fermer des onglets et détruire des choses
Fatal error: Call to undefined function obdc_do()Code qui s'ouvre pas bien avec dreamweaver
Friend declaration error dans une classe SetTrigger / caractère echappement ss MySQL
Script de gestion d'articleserreur $_POST['URL']
batch, commande ping et rapport d'erreurErreur 500 avec htaccess lorsque le require est activé
Plus de sujets relatifs à : Gestion d' "erreur" avec trigger_error() - bien/pas bien ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR