2015-09-09 12 views
5

In PHP, wie gelten Regeln für Variablenbereiche für Try/Catch-Blöcke? Verlassen Variablen, die innerhalb des Blocks try deklariert wurden, den Bereich, in dem der Block beendet wurde? Oder sind sie im Umfang bis zum Ende der Funktion/Methode?PHP-Variablenbereich in Try/Catch-Block

Zum Beispiel:

try 
{ 
    // This may throw an exception when created! 
    $o = new Pronk(); 
} 
catch (Exception $ex) 
{ 
    // Handle & exit somehow; not important here 
    return false; 
} 

$o->doPronk(); 

Ist diese gültig? Oder sollte $o = NULL; vor dem Versuch/catch gesetzt werden, um $o in Geltungsbereich zu halten?

(Ich weiß, dass der Beispielcode tut Arbeit, aber ich weiß auch, PHP ein wenig dumm bekommen kann, wenn es um Scoping kommt. Meine Frage ist, im Idealfall, wie sollte es? Was ist der richtige ist und richtige Art und Weise, dies zu tun?)

+0

PHP hat keinen Blockbereich. Der Variablenumfang ist die gesamte Funktion. – Barmar

Antwort

6

Ihr Code ist gültig. Der Variablenumfang in PHP ist nach Funktion, nicht nach Block. Sie können also eine Variable innerhalb des try Blocks zuweisen und auf sie zugreifen, solange sie sich in derselben Funktion befinden.

2

Ich glaube, das ist meist auf Meinung basiert. Der Code ist korrekt und wird wie erwartet funktionieren, solange der catch-Block immer die return-Anweisung enthält. Wenn der catch-Block nicht zurückkehrt, wird der Fluss fortgesetzt und der Code außerhalb des try/catch-Blocks wird ausgeführt und wird fehlschlagen, weil $o nicht initialisiert wird. Sie können auf $o zugreifen, da der Blockbereich in PHP fehlt, die Methode jedoch nicht existiert, weil die Objektkonstruktion fehlgeschlagen ist.

0

Das Hauptkonzept für die Ausnahmebehandlung ist, dass wenn innerhalb des "try" -Blocks etwas schief geht, der Code in den "catch" -Block eintritt. also wenn

$o = new Pronk(); 

keinen Fehler auslösen wird es in Umfang sein. wir müssen es nicht vor dem try/catch-Block deklarieren. Ihr Code ist absolut gültig.