[英]PHP variable scope within Try/Catch block
在 PHP 中,變量范圍規則如何應用於 Try/Catch 塊? 當塊完成時,在try
塊中聲明的變量是否超出范圍? 或者它們是否在函數/方法結束之前的范圍內?
例如:
try
{
// This may throw an exception when created!
$o = new Pronk();
}
catch (Exception $ex)
{
// Handle & exit somehow; not important here
return false;
}
$o->doPronk();
這是有效的嗎? 或者應該$o = NULL;
在 try/catch 之前設置以保持$o
在范圍內?
(我知道示例代碼確實有效,但是我也知道 PHP 在范圍界定方面可能會變得有點愚蠢。我的問題是,理想情況下,它應該如何工作?正確和正確的方法是什么?)
您的代碼有效。 PHP中的變量范圍是按功能而不是阻止。 所以你可以在try
塊中分配一個變量,並在外面訪問它,只要它們在同一個函數中。
我認為這主要是基於意見的。 代碼是正確的,只要catch
塊始終具有return
語句,它將按預期工作。 如果catch
塊沒有返回,則流程將繼續,並且try / catch塊外部的代碼將被執行,並且它將失敗,因為$o
將不會被初始化。 您將能夠訪問$o
因為php中缺少塊范圍,但該方法將不存在,因為對象構造失敗。
異常處理的主要概念是,如果“try”塊內部出現任何問題,代碼將進入“catch”塊。 因此,如果
$o = new Pronk();
不會引起任何錯誤,它將在范圍內。 我們不必在try / catch塊之前聲明它。 你的代碼完全有效。
只要您的 obj 構造正確,您就可以期望在 try/catch 塊之外使用obj
但是,假設在構建過程中出現異常。 那么你的obj
甚至不會在 try 塊內構建。 因此,您將無法調用obj
上的函數,因為obj
甚至沒有被創建。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.