從PHP7開始,便引入了Error並定義了一些內建錯誤。在這裡總結一些所定義的內建錯誤,也算是有個記錄。
ArithmeticError:Error子類,在執行數學運算髮生錯誤時拋出。PHP7中這些錯誤包括執行負數位移操作、以及調用intp()導致的超出整數範圍之外的值。
AssertionError:Error子類,通過assert發出的宣告失敗時拋出異常。只有ini設定zend.assertions、assert.exception為1並且啟用斷言時,執行assert()時才會在為false時拋出AssertionError異常。
ParseError:Error子類,當解析PHP代碼發生錯誤時會拋出異常。
TypeError:Error子類,當傳遞給函數的參數類型與它對應的聲明參數類型不符;從函數返回的值與聲明的函數傳回型別不匹配以及在strict 模式下將無效數量的參數傳遞給內建的PHP函數時會拋出異常。
pisionByZeroError:ArithmeticError子類,當分母為0或者當0被用作模運算子(%)時,從intp()中拋出異常。在除法(/)操作符中使用0隻會發出警告,如果分子為0結果為NAN,如果分子非0則結果為INF。
ArgumentCountError:PHP7.1起,TypeError子類,當傳遞給使用者定義的函數或方法少於定義的參數數量時拋出異常。
<?phpdeclare(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")();?>