PHP7起,引入了Error并定义了一些内置错误。
ArithmeticError:Error子类,在执行数学运算发生错误时抛出。PHP7中这些错误包括执行负数位移操作、以及调用intdiv()导致的超出整数范围之外的值。
AssertionError:Error子类,通过assert发出的断言失败时抛出异常。只有ini设置zend.assertions、assert.exception为1并且启用断言时,执行assert()时才会在为false时抛出AssertionError异常。
ParseError:Error子类,当解析PHP代码发生错误时会抛出异常。
TypeError:Error子类,当传递给函数的参数类型与它对应的声明参数类型不匹配;从函数返回的值与声明的函数返回类型不匹配以及在严格模式下将无效数量的参数传递给内置的PHP函数时会抛出异常。
DivisionByZeroError:ArithmeticError子类,当分母为0或者当0被用作模运算符(%)时,从intdiv()中抛出异常。在除法(/)操作符中使用0只会发出警告,如果分子为0结果为NAN,如果分子非0则结果为INF。
ArgumentCountError:PHP7.1起,TypeError子类,当传递给用户定义的函数或方法少于定义的参数数量时抛出异常。
ArithmeticError:Error子类,在执行数学运算发生错误时抛出。PHP7中这些错误包括执行负数位移操作、以及调用intdiv()导致的超出整数范围之外的值。
AssertionError:Error子类,通过assert发出的断言失败时抛出异常。只有ini设置zend.assertions、assert.exception为1并且启用断言时,执行assert()时才会在为false时抛出AssertionError异常。
ParseError:Error子类,当解析PHP代码发生错误时会抛出异常。
TypeError:Error子类,当传递给函数的参数类型与它对应的声明参数类型不匹配;从函数返回的值与声明的函数返回类型不匹配以及在严格模式下将无效数量的参数传递给内置的PHP函数时会抛出异常。
DivisionByZeroError:ArithmeticError子类,当分母为0或者当0被用作模运算符(%)时,从intdiv()中抛出异常。在除法(/)操作符中使用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 testDivisionByZeroError(){
try{
1%0;
}catch(DivisionByZeroError $e){
echo 'show DivisionByZeroError:';
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("DivisionByZeroError")();
//foo("ArgumentCountError")();
?>