php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.09.2008, 11:13  
Neuer Benutzer
 
Registriert seit: 19.07.2008
Beiträge: 7
Higidi befindet sich auf einem aufstrebenden Ast
Standard Exception

Also ich möchte eine eigene Exception Klasse für ein bereits vorhandens Projekt entwickeln und bin gerade an einem Punkt, wo ich leider nicht weiterkomme. Arbeite auch leider noch nicht so lange mit PHP, dass mir gerade das technische oder logische Verständnis fehlt und ich dachte ich hole mir Hilfe.

In dem Projekt, wo ich arbeite, arbeiten noch mehr al 10 weitere Leute, das Projekt ist mal so in paar Wochen entstanden und riesig geworden, aber genauso sieht der Code auch aus und ich bemühe mich jetzt einiges daraus zu machen, besser natürlich.
In diesem Projekt werden auch Exceptions geschmissen, diese will ich jetzt abfangen.
PHP erlaubt es mir einen Default Exception Handle zu definieren, was ich mit
PHP-Code:
/** define exception handling **/
set_exception_handler(array('FW''handleExceptions')); 
getan habe. Hier verweise ich auf eine statische Methode der Klasse 'FW' nämlich der Methode 'handleExceptions'.
Hier ein Auszug der Methode in der Klasse 'FW'
PHP-Code:
class FW {
    
/**
     *         method to handle exceptions which not catch
     * @access     public static
     * @param     object $exception
     * @return     none
     */
    
public static final function handleExceptions(Exception $e) {
        print 
$e;
    }

Hier wird noch nicht viel verändert.
Jetzt habe ich mir eine Klasse gebastelt, die heißt 'SystemExceptions' und die erweitert die PHP Grundklasse 'Exceptions'.
PHP-Code:
class SystemException extends Exception {

Diese Klasse beinhaltet alle Grundfunktionen die ich später für die Verarbeitung der Exceptions brauche, ich habe hier jetzt mal keine Methoden angegeben.
Unter anderem soll diese Klasse sich auch um die Ausgabe kümmern. Es gibt verschiede Accesslevel in dem Script (naja, die Lösung mit Accessleveln ist so oder so etwas fraglich, aber wie gesagt, das Script ist unter großem Druck in kurzer Zeit entstanden).
Jetzt soll es aber zwei verschiedene Ausgaben geben, nämlich einmal für User und einmal für Admins. Also erweitere ich die Klasse um eine weitere 2 weitere Kindsklassen von 'SystemExceptions', die jeweils nur die Methode show() enthält, die sich um die jeweils unterschiedliche Ausgabe kümmert.
Hier der Code, zum Verständnis:
PHP-Code:
class PrintAdminSystemException extends SystemException {
    public function 
show() {
        
    }
}
class 
PrintUserSystemException extends SystemException {
    public function 
show() {    
    }

So, jetzt habe ich also einen Baum, also die beiden Klassen 'PrintAdminSystemException' und 'PrintUserSystemException' erweitern schon meine selbst geschriebene Klasse 'SystemException', die wiederum die PHP Grundklasse 'EXceoption' erweitert. Ich soweit kann man mir folgen.

Jetzt zu meinem Problem.
  1. In den bisher geschrieben Scripten gibt es vielleicht Exceptions die so geworden wurden:
    PHP-Code:
    throw new Exception('bla',0); 
    Ich jedoch habe ja eine neue Klasse dafür entwickelt, nämlich SystemExceptions. Wie mache ich das jetzt, das die bereits vorhanden Scripte ihre Exception nicht an die PHP eigenen Exception Klasse werden, sondern an meine?
  2. Irgendwie muss ich ja noch entscheiden, welche Ausgabe durchgeführt werden soll, also damit meine ich die beiden von mir angesprochen Klassen 'PrintAdminSystemException' und 'PrintUserSystemException', nur aufgerufen wird die Klasse SystemException. Gibt es jetzt die Möglichkeit, das die Klasse 'SystemException' dies im Konstruktor entscheidet und sich selber quasi nochmal neu aufruft mit einer der Print Klassen, die ja die eigentlich den gleichen Inhalt nur mit einer Methode mehr haben? Ist sehr schwer zu verstehen, ich weiß, vielleicht denke ich auch viel zu kompliziert, nur das war so meine Idee dazu. Gibt es dazu überhaupt eine Möglichkeit eine Klasse sich selbst aufrufen zulassen, was ich ja durch den Extend tue und seinen kompletten Inhalt an die nächste Klasse zu übergeben?
Hoffe das jemand aus dem schlau wird, was ich da vor habe und das mir jemand helfen kann, weil ich hänge dort wirklich fest und brauche das eigentlich relativ dringend. Ich meine das schöne an Klassen ist ja, das man dort jetzt nicht wirklich dran festhängt, sondern noch genug andere Stellen hat, an den man weiterarbeiten kann, aber fände es schon cool, wenn mir da vielleicht mal jemand unter die Arme greifen könnte.

Vorab schonmal viele Grüße

Higi
Higidi ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 09.09.2008, 11:37  
Benutzer
 
Registriert seit: 02.09.2008
Beiträge: 38
Fumpi befindet sich auf einem aufstrebenden Ast
Standard

Zu verstehen ist das Ganze schon

Spontane Idee:
je nachdem, ob User oder Admin (muss ja irgendwo im Script festgehalten und auch ausgelesen werden können) eben:

throw new PrintUserSystemException('bla',0);
throw new PrintAdminSystemException('bla',0);
Fumpi ist offline   Mit Zitat antworten
Alt 09.09.2008, 11:41  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.241
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

1/ Hmm, im Manual liest Du nicht viel, oder? Genau wie für Fehler gibt es eine set_exception_handler Funktion.
2/ Du könntest in der final Funktion pauschal noch eine zweite Methode aufrufen, die für bestimmte Objekte dann eben nur leer definiert ist.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 09.09.2008, 12:24  
Neuer Benutzer
 
Registriert seit: 19.07.2008
Beiträge: 7
Higidi befindet sich auf einem aufstrebenden Ast
Standard

@Fumpi:

Naja, so einfach ist das leider nicht, das könnte ich jetzt machen, da gebe ich dir recht in allen neu erstellten Scripten. Ich möchte das allerdings in den 200 (ungelogen) vorhandenen Dateien nicht abändern müssen, wo eine Exception nur mit
PHP-Code:
throw new Exception('bla',0); 
aufgerufen wurde.

@nikosch:
Doch eigentlich lese ich sehr viel Manual, nur ich glaube ich die habe die Funktion nicht so richtig verstanden oder mir fehlt gerade das technische Verständnis dafür, oder noch simpler ich habe gerade ein Brett vorm Kopf. Die Funktion bzw. Option von PHP "set_exception_handler" ist mir sehr wohl bekannt, habe Sie ja auch bereits in meinem ersten Posting geschrieben. Jedoch wie setzte ich die sinnvoll ein.

Also fangen wir mal mit Punkt eins an. Ich möchte im Moment den Aufruf aus den anderen scripten, wo eine Exception geworden wird über die Klasse SystemException ablaufen lassen, ohne jetzt in dem jedem Script den throw befehl von "throw new Exception();" auf "throw new SystemException();" abändern zu müssen. Ich hoffe mir kann jemand folgenden.
Higidi ist offline   Mit Zitat antworten
Alt 09.09.2008, 12:36  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.241
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Sorry, hab nicht alles genau gelesen. Wenn Du genannte Funktion benutzt, dann sollte die Exception doch auch die angegebene statische Methode aufrufen. Und in handleExceptions erzeugst Du eben was Du brauchst...
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 09.09.2008, 13:00  
Neuer Benutzer
 
Registriert seit: 19.07.2008
Beiträge: 7
Higidi befindet sich auf einem aufstrebenden Ast
Standard

Ja. Richtig, aber an die Funktion wird das fertige Object der Klasse übergeben ich will aber eigentlich das vorher schon dafür sorgen, das es von einer anderen Klasse bearbeitet wird. Kann man das irgendwie umleiten ohne das ich jetzt jede einzelne Datei jetzt umschreibe? Das war meine Frage und wie ich die Klasse Aufrufe, die dann entscheidet welche subklasse aufgerufen werden muß je nach Benutzer berechtigung.

Gruß Daniel
Higidi ist offline   Mit Zitat antworten
Alt 09.09.2008, 13:01  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.241
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Ich verstehe Dich nicht.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 09.09.2008, 13:33  
Neuer Benutzer
 
Registriert seit: 19.07.2008
Beiträge: 7
Higidi befindet sich auf einem aufstrebenden Ast
Standard

Ganz simpel eigentlich.

Ich habe 200 Dateien, da wird bestimmt mal eine Exception geworfen an die Klasse PHP eigene Exception Klasse, z.B. so:
PHP-Code:
throw new Exception('das ist eine exception in einer von 1000 dateien in meinem system',100); 
So, damals gab es noch nicht den Ansatz einer Exception Klasse bzw es wurde noch kein Gedanke daran "verschwendet" eine zu schreiben, weil das Projekt so in 3 Monaten entstanden ist und unter Druck. Jetzt habe ich heute eine entwickelt und möchte diese einsetzten ohne jetzt jede Datei abzuändern von dem obrigen Beispiel in
PHP-Code:
throw new SystemException('dies ist ein test',0); 
Also es wird jetzt an die Klasse Exception geworden und ich habe eine neue Klasse entwickelt, die sich SystemException nennt und ich möchte einfach, das diese genutzt wird ohne das ich jetzt jede der 200 Dateien umschreibe. Ich dachte vielleicht geht es über die set_exception_handler Option von PHP, jedoch habe ich das Gefühl, die Funktion nicht ganz verstanden zu haben.
Ich hoffe du konntest mir jetzt folgen.
Higidi ist offline   Mit Zitat antworten
Alt 09.09.2008, 13:40  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.241
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Dann habe ich Dich doch verstanden und sehe nur das Problem nicht.

Theoretisch solltest Du doch jetzt sowas tun können:

PHP-Code:
class FW {
    public static final function 
handleExceptions(Exception $e) {
        new 
SystemException ($e->getMessage());
    }

Notwendige weitere Parameter mußt Du dann irgendwie global ermitteln und dann bei Bedarf über ein Switch verschiedene ExceptionObjekte erzeugen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 09.09.2008, 14:01  
Neuer Benutzer
 
Registriert seit: 19.07.2008
Beiträge: 7
Higidi befindet sich auf einem aufstrebenden Ast
Standard

Hihi, leider nein, so schlau war ich auch schon, jedoch erstellt die Exception dann auf der PHP Seite mit der Klasse, also der Klasse FW. Das hatte ich mir auch schon gedacht.
Es musst entweder eine andere Lösung geben, oder ich muss die Werte ganz einfach auslesen, und einzelnd an das neue Object weitergeben. Grml
Oder ich ändere einfach überall die Exception, was nicht unbedingt von Nachteil wäre, denn, die Seiten müssten ja eigentlich alle mal überarbeitet werden, da diese so oder so stellenweise so schlecht geschrieben sind ... manchmal stelle ich mir überhaupt die Frage, wieso dort was angezeigt wird ... aber so ist das wenn tausend Leute daran arbeiten, stellenweise noch nichtmal Programmierer ... aber irgendwie funktionierts.
Also scheint da ja doch keine Lösung zu geben oder hat jemand eine Idee?
Higidi ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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

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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP: Exceptions - Teil 2 Zergling-new Tutorials 5 15.03.2009 11:00
[Erledigt] Exception thrown without a stack frame... mAy^daY PHP Tipps 2008 19 04.08.2008 10:44
exceptionhandling - was wird als exception behandelt? Crypi PHP Tipps 2008 3 21.06.2008 07:56
Firebug Exception Blackmail JavaScript, Ajax und mehr 5 18.06.2008 08:54
PHP/MySQL: QCodo's Code-Generator Zergling-new Tutorials 2 09.05.2008 05:33
PHP: Exceptions - Teil 1 Zergling-new Tutorials 4 05.12.2007 23:31
__autoload und is_subclass_of Zergling-new PHP-Fortgeschrittene 1 23.09.2007 18:19
intern: html tag strong im title beim registrieren brian johnson Off-Topic Diskussionen 4 13.08.2007 13:03
Ermitteln ob Methode geerbt wurde oder nicht? MaMo-Net PHP Tipps 2007 23 14.04.2007 00:28
erbende Exceptions mit PHP 5.1.1 nicht mehr möglich? HStev PHP-Fortgeschrittene 4 27.01.2006 14:32
PHP5: Exception im Konstruktor verhindert Instanziierung Quadaptor PHP-Fortgeschrittene 4 31.03.2005 17:33
[php5/Exceptions] Exception thrown without a stack frame PHP-Fortgeschrittene 4 24.11.2004 21:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php exception weitergeben, php eigene exception klasse, php exceptions weitergeben, php eigene exception, http://www.php.de/php-fortgeschrittene/47303-exception.html, php exception weiterreichen, php system exception, php exception, php exception weiter geben, php wieso eigene exceptions deklarieren, php exception weiterleiten, exceptions definieren php, exception weitergeben php, eigene exception klasse php, eigene exceptions klasse php, exception weiterreichen php, php exception class, php exception definieren, php systemexception, php exception eigene klassen

Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum