2015-09-09 57 views
5

在PHP中,變量範圍規則如何應用於Try/Catch塊?塊完成後,在try塊中聲明的變量是否超出範圍?或者它們是否在範圍內,直到函數/方法結束?Try/Catch塊內的PHP變量範圍

例如:

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

$o->doPronk(); 

這是有效的?或者應該在try/catch之前設置$o = NULL;以保持$o的範圍?

(我知道示例代碼確實工作,但是我也知道PHP可以得到一點點愚蠢的,當涉及到作用域。我的問題是,理想情況下,如何應該工作?什麼是正確的,適當的方式來做到這一點?)

+0

PHP沒有塊範圍。變量範圍是整個功能。 – Barmar

回答

6

您的代碼有效。 PHP中的變量作用域是按功能而不是阻止的。因此,您可以在try區塊內指定一個變量,並在外部訪問它,只要它們處於相同的功能。

2

我相信這是主要的意見。代碼是正確的,只要catch塊總是有return語句,它就會按預期工作。如果catch塊沒有返回,則流將繼續並且try/catch塊外的代碼將被執行,並且將失敗,因爲$o將不會被初始化。由於php中缺少塊範圍,您將能夠訪問$o,但由於對象構造失敗,該方法將不存在。

0

異常處理的主要概念是,如果「try」塊內出現任何錯誤,代碼將進入「catch」塊。所以如果

$o = new Pronk(); 

不會引發任何錯誤,它將在範圍內。我們不必在try/catch塊之前聲明它。 你的代碼是完全有效的。