Try, catch tanker

Tags:    php

Hey Udviklere,

Jeg er ved at overveje strukturen for noget exceptionhandling og i den forbindelse kom jeg til at tænke på en måske væsentlig ting.
Jeg er ved at lave en klasse til MySQL, der thrower jeg en exception hvis query ikke kan udføres eller der ikke kan oprettes forbindelse til serveren. I selv samme klasse laver jeg min try-catch, er det uhensigtigsmæssig?

Meningen er at med tiden så skal der i en config fil definieres om det er til debug / development, så vil den vise Queries hvis de fejler samt mere detaljerede informationer, der kan hjælpe. Derimod hvis det er i brug viser den minimal og skal logges istedet.

Vil det gøre det svære med den struktur jeg har nævnt?

Mvh Martin



8 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Det vil jeg mene at det er da du nemt kan løse den problemstilling med nedestående.

Fold kodeboks ind/udPHP kode 




Jeg ser umiddelbart et problem i at executeQuery() ikke kaster en exception. Problemet er at den kode der kalder executeQuery() skal huske at tjekke $messages for at se om udførslen gik godt. Hvis man glemmer denne stump kode, vil den kaldende kode fortsætte uvidende om at noget gik galt, hvilket i de fleste tilfælde ikke er tilsigtet.

Jeg ville lade klassen kaste en exception, og så måtte det være op til den kaldende kode at håndtere den og vælge om fejlen skal vises på skærmen, sendes i en e-mail, gemmes i en logfil eller noget helt andet.



Kan vi se koden? Umiddelbart kan jeg ikke se noget forkert i at du fanger en exception som du smider. Det er vel bare en metode der kalder en anden. At den ene metode smider en exception som den anden fanger kan jeg ikke se noget forkert i.



Sådan ser min kode ud indtil videre:

Fold kodeboks ind/udPHP kode 


Spørgsmålet er bare om try/catch skal bruges uden for min klasse, hvis den skal benyttes "rigtigt" eller er det lige gyldigt?



Indlæg senest redigeret d. 17.09.2009 21:44 af Bruger #6559
Er det ikke mega meget kode når du kan gøre flg:

Fold kodeboks ind/udPHP kode 


Du kan evt. også lege med http://us2.php.net/manual/en/function.set-exception-handler.php



#Michael
Det kan da godt være. Det var mere fordi jeg har tænkt på, at der skal være flere error messages, en til udviklingsfasen og så "in-production". Men det er måske bare spild af gode resurser?



Ok, det vil jeg prøve at kigge på :)



Jeg ser umiddelbart et problem i at executeQuery() ikke kaster en exception. Problemet er at den kode der kalder executeQuery() skal huske at tjekke $messages for at se om udførslen gik godt. Hvis man glemmer denne stump kode, vil den kaldende kode fortsætte uvidende om at noget gik galt, hvilket i de fleste tilfælde ikke er tilsigtet.

Jeg ville lade klassen kaste en exception, og så måtte det være op til den kaldende kode at håndtere den og vælge om fejlen skal vises på skærmen, sendes i en e-mail, gemmes i en logfil eller noget helt andet.


Jeg er skam heller ikke færdig med klassen endnu :). Men ja, det var faktisk sådan noget i den stil jeg havde i tankerne. Jeg er ved at lave en custom exception class, hvor jeg så udfra en konstant bestemmer om det skal vises eller logges til en fil.

Eksempel:
Hvis jeg har en Nyheds-klasse som bruger mysql, så lader jeg den tjekke for mysql relaterede fejl, eller skal jeg en tak længere op, så jeg tjekker helt uden for en klasse?



Indlæg senest redigeret d. 18.09.2009 10:22 af Bruger #6559
t