2014-02-10 131 views
0

來自沒有太多經驗的人的一個非常簡單的問題。下面的try catch塊具有「(Exception $ e)」部分:這是否就像sql,其中$ e成爲Exception的別名?如果是這樣,這種類型的別名分配在PHP的其他地方使用,因爲我沒有遇到它?我已經搜索了幾個小時,卻無法在網上找到解釋。PHP嘗試catch塊語法

function inverse($x) { 
if (!$x) { 
    throw new Exception('Division by zero.'); 
      } 
      else return 1/$x; 
      } 

     try { 
      echo inverse(5) . "<br/>"; 
      echo inverse(0) . "<br/>"; 
      } catch (Exception $e) { 
      echo 'Caught exception: ', $e->getMessage(), "<br/>"; 
      } 

      echo 'Hello World'; 
+0

這是[聲明](https://en.wikipedia.org/wiki/Declaration_(computer_programming \)) – Brian

+0

@Brian關閉,有點。它看起來像一個,就像你從其他的聲明性語言中習慣的那樣。然而,這是不正確的,PHP沒有明確的聲明的概念。這是一個_filter_,而不是一個聲明。它過濾catch塊以僅捕獲匹配條件爲異常(或任何類型)的條件的異常。這就是爲什麼通過指定不同的過濾器表達式來鏈接多個catch塊是有意義的。 – arkascha

回答

0

這是OO的PHP。 $ e是異常對象的一個​​實例。

$é很容易被貼上別的,只要它被稱爲其當你想的getMessages等

例如;

try { 
     echo inverse(5) . "<br/>"; 
     echo inverse(0) . "<br/>"; 
     } catch (Exception $oops) { 
     echo 'Caught exception: ', $oops->getMessage(), "<br/>"; 
     } 
+1

也關閉,但不正確。它是_filter_,而不是實例化類型。如果是這種情況,代碼將會有所不同。看看我上面的評論... – arkascha

+0

@arkascha如果你有真實的,準確的答案,請回答它,以便我可以爲你星級。 – Brian

+0

是的,謝謝,我已經計算出其他替代方法會起作用,但是您能否指示我參考了整個try catch塊的語法以及特別是「catch」之後的括號。 – user2790911

1

你提到的是過濾器結構。它類似於從其他聲明性語言中獲知的聲明。但事實上它有不同的含義。實際上php不具有明確聲明的概念(這是一種恥辱......)。

這個例子看看:

function my_func($x) { 
    try { 
     /* do something */ 
     if (1===$x) 
      throw new SpecialException('x is 1.'); 
     else if (is_numeric($x)) } 
      throw new SpecialException('x is numeric.'); 
     else return $x; 
    } 
    catch (SpecialException $e) { 
     echo "This is a special exception!"; 
     /* do something with object $e of type SpecialException */ 
    } 
    catch (Exception $e) { 
     echo "This is a normal exception!"; 
     /* do something with object $e of type SpecialException */ 
    } 
} 

這變得清晰建設是什麼:它過濾出的異常類型。所以這幾個catch塊的被執行的問題可以被移植到拋出異常的類型。這可以在需要時進行非常精細的異常處理。沒有這樣的功能,只有一個catch塊是合法的,你必須爲每個catch塊的潛在異常類型實施條件測試。這個特性使得代碼更具可讀性,雖然它在PHP語法中有一些突破。

您不必這樣做,但是您可以創建自己的具有特殊行爲的異常類,更重要的是,可以接受並提供有關實際發生的更多信息。