Alt 24.05.2011, 10:43:17   #1 (permalink)
Erfahrener Benutzer

ID: 217591
Lose-Remote

Aradiv eine Nachricht über ICQ schicken Aradiv eine Nachricht über MSN schicken
Reg: 20.04.2006
Beiträge: 1.543
Aradiv ist ein wunderbarer AnblickAradiv ist ein wunderbarer AnblickAradiv ist ein wunderbarer AnblickAradiv ist ein wunderbarer AnblickAradiv ist ein wunderbarer AnblickAradiv ist ein wunderbarer AnblickAradiv ist ein wunderbarer AnblickAradiv ist ein wunderbarer Anblick
Standard ErrorHandler Ideen

Hi ich möchte alle Fehler mit einem eigenen ErrorHandler abfangen. So lange ich da immer nur eine "Standardfehlermeldung" Anzeige ist das auch kein Problem. Im Testmodus möchte ich aber genauere Fehlerbeschreibungen ausgeben Lassen.
Zu diesem Zweck habe ich eigene Exceptions mit einigen eigenen Daten

als Beispiel mysqlException hier wird zusätzlich noch das zu Grunde liegende Query gespeichert die erzeugte Resource und fals vorhanden die mysql Fehlermeldung.

Im Detail sieht das in der Datenbankklasse dann wie folgt aus
PHP-Code:
1:
throw new MysqlException("An error ocured on execution of your query"self::$__queryself::$__resourcemysql_error()); 
Über set_error_handler kann ich problemlos alle Fehler abfangen nur mein Problem ist
wie unterscheide ich welche Art von Exception jetzt aufgetreten ist ohne ein try catch für jede Exception zu schreiben.

Aradiv

Geändert von Aradiv (24.05.2011 um 11:47:34 Uhr)
Aradiv ist offline   Mit Zitat antworten
Gesponsorte Links
Alt 24.05.2011, 11:47:14   #2 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

instanceof? Nur ne Idee, hab ich noch nie probiert.
theHacker ist gerade online   Mit Zitat antworten
Alt 24.05.2011, 13:16:32   #3 (permalink)
Multitalent
Benutzerbild von joschilein

ID: 9301
Lose-Remote

joschilein eine Nachricht über ICQ schicken
Reg: 05.05.2006
Beiträge: 1.414
joschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehen
Standard

instanceof funktioniert wunderbar, habe ich rege im Einsatz.

PHP-Code:
1:
2:
3:
4:
echo $e->message;
if (
$e instanceof MysqlException){
  echo 
$e->query;

Alternativ geht auch:
PHP-Code:
1:
2:
3:
4:
echo $e->message;
if (
get_class($e) == 'MysqlException'){
  echo 
$e->query;



Heute schon gepixelt
joschilein ist offline   Mit Zitat antworten
Alt 24.05.2011, 13:20:44   #4 (permalink)
Woohooo!
Benutzerbild von chrissel

ID: 211634
Lose-Remote

chrissel eine Nachricht über ICQ schicken
Reg: 20.04.2006
Beiträge: 4.412
chrissel genießt hohes Ansehenchrissel genießt hohes Ansehenchrissel genießt hohes Ansehenchrissel genießt hohes Ansehenchrissel genießt hohes Ansehenchrissel genießt hohes Ansehenchrissel genießt hohes Ansehenchrissel genießt hohes Ansehenchrissel genießt hohes Ansehenchrissel genießt hohes Ansehenchrissel genießt hohes Ansehen
Standard

Und wenn du einfach den Klassennamen ausgeben willst: get_class()

EDIT: Ah. Zu spät. Das kommt davon wenn man vergisst den Post abzusenden und das erst später bemerkt.


Wobei ich eigentlich gerade sehe, dass das alles ein wenig komisch ist wie ihr das macht/vorhabt: Wozu gibt es die Methode Exception::__toString() oder Exception::getMessage()?
Somit kann man dann bei jeder Klasse diese Methode überschreiben und muss nicht bei jeder Fehlerausgabe unterscheiden welche Klasse man hat!? Sonst muss man ja für jede Klasse da was hinzufügen.. wäre ja richtig schei*e

Und joschilein: get_class() zeigt immer den "wahren" Klassennamen an, mit instanceof werden auch die Eltern überprüft wenn ich es richtig im Kopf habe:

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
class {

}

class 
extends {

}

$a = new A();
$b = new B();

// alles ungetestet
var_dump($a instanceof A); // true
var_dump($b instanceof B); // true
var_dump($b instanceof A); // true

echo get_class($a); // A
echo get_class($b); // B 

Geändert von chrissel (24.05.2011 um 13:28:31 Uhr)
chrissel ist offline   Mit Zitat antworten
Alt 24.05.2011, 14:05:53   #5 (permalink)
Multitalent
Benutzerbild von joschilein

ID: 9301
Lose-Remote

joschilein eine Nachricht über ICQ schicken
Reg: 05.05.2006
Beiträge: 1.414
joschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehen
Standard

Zitat:
Zitat von chrissel Beitrag anzeigen
Wobei ich eigentlich gerade sehe, dass das alles ein wenig komisch ist wie ihr das macht/vorhabt: Wozu gibt es die Methode Exception::__toString() oder Exception::getMessage()?
Somit kann man dann bei jeder Klasse diese Methode überschreiben und muss nicht bei jeder Fehlerausgabe unterscheiden welche Klasse man hat!? Sonst muss man ja für jede Klasse da was hinzufügen.. wäre ja richtig schei*e
Also meine Exception Klassen haben eigene Methoden für eine ordentlich strukturierte und farbige Debug-Ausgabe (worauf auch __tostring() geschaltet ist), bei der db-Variante natürlich auch mit Query etc. Aber das ist natürlich alles Geschmackssache. Ich nutze die verschiedenen Exception-Klassen nicht zur unterschiedlichen Ausgabesteuerung, sondern zur einfachen gezielten catch-Behandlung. So schmeiße ich die db-Exceptions meist bis oben durch, um nicht ewig mit fehlerhaften Querys zu arbeiten, die ich sonst vielleicht gar nicht bemerkt hätte.

Und übrigens motzt mich mein exception_handler an, wenn er eine Exception zur Verarbeitung bekommt, ich sie also nicht irgendwo gefangen und behandelt habe. Das hat mir auch schon mal geholfen.


Zitat:
Zitat von chrissel Beitrag anzeigen
Und joschilein: get_class() zeigt immer den "wahren" Klassennamen an, mit instanceof werden auch die Eltern überprüft wenn ich es richtig im Kopf habe:
Jupp. Da meine Exception-Klassen (bzw. generell alle Klassen) aber überschaubar sind (keine Arbeitsklasse vererbt an eine andere, sie haben höchstens gemeinsame Eltern), habe ich die Unterscheidung bisher nicht wirklich benötigt.


Heute schon gepixelt
joschilein ist offline   Mit Zitat antworten
Antwort

Gesponsorte Links

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Bis zu 5 Mio für Ideen zu www.sms4credits.de Bububoomt Lose4Action 186 02.08.2009 12:24:07
Ideen für Werbung? hornedry2k Marketing 0 03.11.2008 08:42:46
Ideen für Features->bis zu 5 Mio Bububoomt Lose4Misc 35 24.06.2007 13:05:59
Firmenname - Ideen? scriper Gott und die Welt 43 13.01.2007 22:03:28


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:22:26 Uhr.