簡體   English   中英

Try/Catch 塊中的 PHP 變量范圍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM