從PHP7開始,便引入了Error並定義了一些內建錯誤。這裡總結一些所定義的內建錯誤,也算是有個記錄。
ArithmeticError:Error子類,在執行數學運算發生錯誤時拋出。 PHP7中這些錯誤包括執行負數位移操作、以及呼叫intp()所導致的超出整數範圍之外的值。
AssertionError:Error子類,透過assert發出的斷言失敗時拋出異常。只有ini設定zend.assertions、assert.exception為1並且啟用斷言時,執行assert()時才會在為false時拋出AssertionError異常。
ParseError:Error子類,當解析PHP程式碼發生錯誤時會拋出異常。
TypeError:Error子類,當傳遞給函數的參數類型與它對應的聲明參數類型不匹配;從函數返回的值與聲明的函數返回類型不匹配以及在嚴格模式下將無效數量的參數傳遞給內建的PHP函數時會拋出異常。
pisionByZeroError:ArithmeticError子類,當分母為0或當0被用作模運算子(%)時,從intp()中拋出異常。在除法(/)操作符中使用0只會發出警告,如果分子為0結果為NAN,如果分子非0則結果為INF。
ArgumentCountError:PHP7.1起,TypeError子類,當傳遞給使用者定義的函數或方法少於定義的參數數量時拋出異常。
<?php declare(strict_types=1); function foo(string $arg){ return 'test' . $arg;; } function testArithmeticError(){ try { $value = 1 << -1; } catch (ArithmeticError $e) { echo 'show ArithmeticError:'; echo $e->getMessage(); } } function testAssertionError(){ ini_set('zend.assertions', 1); ini_set('assert.exception', 1); try { assert(1>2); } catch (AssertionError $e) { echo 'show AssertionError:'; echo $e->getMessage(); } } function testParseError(){ try { eval('asset(1>2)'); } catch (ParseError $e) { echo 'show ParseError:'; echo $e->getMessage(); } } function testTypeError(){ try { foo(123); } catch (TypeError $e) { echo 'show TypeError:'; echo $e->getMessage(); } } function testpisionByZeroError(){ try{ 1%0; }catch(pisionByZeroError $e){ echo 'show pisionByZeroError:'; echo $e->getMessage(); } } function testArgumentCountError(){ try{ foo(); }catch(ArgumentCountError $e){ echo 'show ArgumentCountError:'; echo $e->getMessage(); } } //foo("ArithmeticError")(); //foo("AssertionError")(); //foo("ParseError")(); //foo("TypeError")(); //foo("pisionByZeroError")(); //foo("ArgumentCountError")(); ?>
相關建議:
以上是PHP中定義的一些內建錯誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!