php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 05.11.2007, 00:49  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard PHP-Errors zu exceptions

hi,

da man, warum auch immer, keine exceptions aus dem kontext von __toString() werfen kann, frage ich mich gerade wie ich das mit set_error_handler() und trigger_error() einigermaßen umgehen kann.

das problem dahingehend ist natürlich, dass alle PHP-Erros durch diesen error_handler laufen. und wenn ich diese Exceptions dann nicht abfange -> aus die maus auch bei notice und warning (siehe code) was fürs debugging für meinen geschmack mist ist.

wie kann ich das jetzt einigermaßen umgehen ohne in __toString() selbst einen error_handler zu definieren und den alten danach wiederherstellen? (hier ist ja das problem, dass wenn im __toString() kontext ein "normaler" fehler auftritt wiederum schluss ist)

gruß


bei nachfolgendem code, kann man php fehler nicht mehr selbst abfangen, das wird ja bereits gemacht....

PHP-Code:
function error_handler($error_number,$error,$error_file,$error_line)
{
    switch(
$error_number)
    {

        case 
E_WARNING:
        case 
E_RECOVERABLE_ERROR:
        case 
E_USER_WARNING:
                    try
                    {
                        throw new 
warning_exception($error,$error_number,$error_file,$error_line);
                    }
                    catch(
warning_exception $warning_exception)
                    {
                        echo 
$warning_exception->getMessage();
                    }
         break;

        case 
E_NOTICE:
        case 
E_USER_NOTICE:
        case 
E_STRICT:
                    try
                    {
                        throw new 
notice_exception($error,$error_number,$error_file,$error_line);
                    }
                    catch(
notice_exception $notice_exception)
                    {
                        echo 
$notice_exception->getMessage();
                    }
         break;

        case 
E_ERROR:
        case 
E_USER_ERROR:
        default:
                    throw new 
fatal_exception($error,$error_number,$error_file,$error_line);
         break;
    }
}

set_error_handler('error_handler'); 
brian johnson ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 05.11.2007, 08:16  
Erfahrener Benutzer
 
Registriert seit: 09.05.2005
Beiträge: 193
akratellio
Standard

hallo brian johnson,

ich kann mir zwar nicht vorstellen warum __toString() keine Exceptions werfen sollte, aber wieso schreibst du dann nicht einfach eine Methode die das gleiche kann? Z.B. mit ner Schleife alle get_object_vars() durchlaufen.
Wenn du willst kannst du diese Methode ja auch mit __toString() aufrufen.

akratellio
__________________
"Ich lüge immer..."
http://www.akratellio.de/dai
akratellio ist offline   Mit Zitat antworten
Alt 05.11.2007, 14:36  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

so ganz versteh ich nicht was du meinst akratellio. __toString() kann man nicht nachbauen....

und wirfst du eine exception, kommt folgende fehlermeldung>

Zitat:
Fatal error: Method template::__toString() must not throw an exception in
und das auch bei jeder funktion die durch __toString() aufgerufen wird....
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline   Mit Zitat antworten
Alt 05.11.2007, 15:09  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Blöde Sache, im Prinzip kannst du nur versuchen zu prüfen, ob es sich um __toString() handelt (debug_backtrace) und dann manuell zur Fehlerbehandlung springen.

PHP-Code:
<?php
function errorHandler($no$str$file$line$context)
{
    if (
FALSE// prüf auf __toString, hab ich mir gespart
        
throw new Exception(print_r(func_get_args(), TRUE));
    else
        
doSth();
}
set_error_handler("errorHandler");

function 
doSth()
{
    die(
"good bye cruel world");
}

class 
X
{
    public function 
__toString()
    {
        return 
undefined_const;
    }
}

$x = new x();
echo 
$x;
?>
Ich mein was soll man sonst groß machen? Ist halt nicht erlaubt, fertig Ist das nur bei __toString() oder bei anderen magischen Methoden auch?
Zergling-new ist offline   Mit Zitat antworten
Alt 05.11.2007, 16:15  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Zergling
Blöde Sache, im Prinzip kannst du nur versuchen zu prüfen, ob es sich um __toString() handelt (debug_backtrace) und dann manuell zur Fehlerbehandlung springen.

PHP-Code:
<?php
function errorHandler($no$str$file$line$context)
{
    if (
FALSE// prüf auf __toString, hab ich mir gespart
        
throw new Exception(print_r(func_get_args(), TRUE));
    else
        
doSth();
}
set_error_handler("errorHandler");

function 
doSth()
{
    die(
"good bye cruel world");
}

class 
X
{
    public function 
__toString()
    {
        return 
undefined_const;
    }
}

$x = new x();
echo 
$x;
?>
Ich mein was soll man sonst groß machen? Ist halt nicht erlaubt, fertig Ist das nur bei __toString() oder bei anderen magischen Methoden auch?
bei __set() __get() __isset() und __unset() ist dem jedenfalls nicht so.

dann muss ich mal schauen, dass ich meine template klasse umschreibe um keine exceptions zu werfen...
brian johnson ist offline   Mit Zitat antworten
Alt 05.11.2007, 16:36  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Rein Interesse-halber: Wie reagierst du auf die unterschiedlichen Exceptions? (Notice, Fatal)
Zergling-new ist offline   Mit Zitat antworten
Alt 06.11.2007, 12:45  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Zergling
Rein Interesse-halber: Wie reagierst du auf die unterschiedlichen Exceptions? (Notice, Fatal)
notice und warnings sind bisher nur ausgeburten meiner fantasie

naja, bei fatal wird ein debug backtrace ausgegeben und dann exit;....

der unterschied ist eben, dass ich eine abstracte exception klasse habe, die dann von fatal_exception simple erweitert wird>

PHP-Code:
class fatal_exception extends jailbreak_exception
{
    function 
__construct($message,$error_code=10099)
    {
        
parent::__construct($message,$error_code,1);
    }

das hat eben 2 vorteile>

1. du kannst nur die exceptions abfangen die du erwartest (unerwartete exceptions sollen zum script ende führen!)

2. es ist logischer als:

PHP-Code:
throw new jailbreak_exception('message',1000,1); 
die letzte 1 gibt einfach an, dass es eine fatale exception ist, also das script beendet und ein voller backtrace angezeigt werden soll.....

gruß
brian johnson 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
PHP: Exceptions - Teil 1 Zergling-new Tutorials 4 05.12.2007 23:31
Welche Art von Exceptions sollte man werfen? Zergling-new PHP-Fortgeschrittene 1 24.09.2007 13:29
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
online klappts -- offline nicht...warum? PHP Tipps 2005 27 15.05.2005 12:04
einfache errors in PHP code,dringend hilfe! PHP Tipps 2005 4 09.03.2005 15:04
Ist der Code richtig? PHP Tipps 2005 13 24.02.2005 13:11

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php error to exception, php error exception, __tostring() must not throw an exception, php errors, error to exception php, php errors to exception, \must not throw an exception\, must not throw an exception, php must not throw an exception, php errors as exception, php catch warning, __tostring() must not throw an exception in, php must not throw an exception in, php errors to exceptions, php exception warning, php exception, http://www.php.de/php-fortgeschrittene/45056-php-errors-zu-exceptions.html, fehlermeldung werfen notice php, php error as exception, php exception notice

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:27 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.