2015-09-09 16 views
5

In PHP, in che modo le regole dell'ambito variabile si applicano ai blocchi Try/Catch? Le variabili dichiarate all'interno del blocco try escono dall'ambito quando il blocco è terminato? O sono nel campo di applicazione fino alla fine della funzione/metodo?Ambito variabile PHP all'interno del blocco Try/Catch

Ad esempio:

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

$o->doPronk(); 

È questo valido? O è necessario impostare $o = NULL; prima del try/catch per mantenere $o in ambito?

(so che il codice di esempio fa lavoro, tuttavia so anche PHP può diventare un po 'stupido quando si tratta di scoping. La mia domanda è, idealmente, come dovrebbero Funzionerà? Qual è la corretta e modo corretto per farlo?)

+0

PHP non ha scope di blocco. Lo scope variabile è l'intera funzione. – Barmar

risposta

6

Il tuo codice è valido. Lo scope variabile in PHP è per funzione, non per blocco. Quindi puoi assegnare una variabile all'interno del blocco try e accedervi all'esterno, purché abbiano la stessa funzione.

2

Credo che questo sia per lo più basato sull'opinione pubblica. Il codice è corretto e funzionerà come previsto finché il blocco catch ha sempre l'istruzione return. se il blocco catch non viene restituito, il flusso continuerà e il codice all'esterno del blocco try/catch verrà eseguito e non riuscirà, perché $o non verrà inizializzato. Sarai in grado di accedere a $o a causa della mancanza di scope di blocco in php, ma il metodo non esiste perché la costruzione dell'oggetto non è riuscita.

0

il concetto principale per la gestione delle eccezioni è che se qualcosa va storto all'interno del blocco "try" il codice entrerà nel blocco "catch". quindi se

$o = new Pronk(); 

non genera alcun errore sarà nell'ambito. non dobbiamo dichiararlo prima di provare/catch block. il tuo codice è perfettamente valido.