2014-04-17 4 views
5

Gibt es eine Methode, die dem Versuch ähnelt, in PHP fangen?versuchen fangen im Gange

try { 
    ... 
} 
catch (Exception $e) { 
    ... 
} 

Ich verwende bereits die Blöcke dieser Art: DO ON ERROR UNDO ... aber ich frage mich, ob es einen anderen Weg, es zu tun ist.

Danke.

Antwort

3

Ja. Seit Version 11.2 gibt es die BLOCK-LEVEL ON ERROR UNDO, THROW.-Anweisung, die das Standardverhalten Ihres gesamten Programms ändert. CATCH gibt es schon länger - seit Version 10.1C.

/* Must be first line of program */ 
BLOCK-LEVEL ON ERROR UNDO, THROW. 

DEFINE VARIABLE i AS INTEGER  NO-UNDO. 

i = INTEGER("Hello"). 

CATCH err AS Progress.Lang.Error:  
    MESSAGE "Error: " err:GetMessage(1)   
     VIEW-AS ALERT-BOX ERROR. 
END. 

Ältere Stil Programm mit machen auf Fehler wie Ihr Beispiel aus der Progress KnowledgeBase genommen.

DO ON ERROR UNDO, THROW: 
    /* The following line raises error (138) which is diverted to a Progress.Lang.SysError object and thrown to the main block. */ 
    FIND Customer 1000. 
END. 

CATCH eAnyError AS Progress.Lang.Error: 
    MESSAGE 
     "Error Number:~t" eAnyError:GetMessageNum(1) "~n" 
     "Error Text:~t" eAnyError:GetMessage(1) 
     VIEW-AS ALERT-BOX BUTTONS OK TITLE "Error processing in the CATCH for mainprocedure block". 
END CATCH. 

komplette Beschreibung der Block-Level-ON ERROR UNDO, WERFEN

Aus dem Handbuch:

Syntax Block-Level-ON ERROR UNDO, WERFEN.

Diese Erklärung betrifft die folgenden Bausteine:

Hauptblock eines externen Verfahrens (.P)

Interne Verfahren

Benutzerdefinierte Funktionen

Methoden einer Klasse

Klassenkonstrukteure

Eigenschaftenaccessoren

ON Blöcke verwendet als Datenbank mit CREATE auslöst, Löschen, Schreiben oder ASSIGN Ereignisse

REPEAT Blöcke

Bausteine ​​

DO TRANSACTION Blöcke

Diese Aussage nicht der Fall ist Auswirkung:
Destruktoren

Fehleranweisungen, die explizit in einzelnen Blöcken ohne Routinenebene codiert sind

ON-Blöcke, die UI-Trigger sind.

Hinweis diese Alternativen zum Block-Level-ON ERROR UNDO, WERFEN Anweisung:
Statt der Anweisung von Hinzufügen von Dateien zu-Source-Code, Sie können die -undothrow 2 Startparameter verwenden, um die Standard- fehler- zu ändern Behandlung auf UNDO, THROW auf jedem Block, der von der BLOCK-LEVEL-Anweisung während der Kompilierung betroffen ist. Weitere Informationen finden Sie unter Startup Command und Parameter Reference.

Die Anweisung ROUTINE-LEVEL ON ERROR UNDO, THROW kann verwendet werden, wenn Sie die Standardfehlerbehandlung nur auf Routinenebene Blöcke ändern möchten. (Sie können den -undothrow 1 Startparameter verwenden, um die Fehlerbehandlung Standards zu ändern auf Routine-Level-Blöcke UNDO, WERFEN während Kompilierung.)

+0

Verdammt, ich bin in 10.1b und 'Blockebene 'wird nicht erkannt. Aber ich behalte diese Antwort für später. Vielen Dank. :) – doydoy44

+0

'THROW' und' CATCH' werden ebenfalls nicht erkannt. :( – doydoy44

+1

Catch als tatsächlich in 10.1C hinzugefügt. Schade. 10.1B ist von 2007, so ein Update sollte berücksichtigt werden. – Jensd