当指定的错误(异常)发生时,异常处理用于更改脚本的正常进程。这种情况称为异常。
PHP 5增加了一个异常处理模块类似于其他语言,PHP代码生成异常可以抛出由catch语句的语句和捕获。代码需要例外处理必须放在try代码块捕获例外。每次尝试都应该至少有一个catch对应它使用多个catch可以捕获不同阶级的产生异常。当try代码块不再抛出一个异常或不匹配被捕获异常,PHP代码将继续在跳到最后抓执行。当然,PHP可以扔掉(扔)在catch代码块例外。

当抛出异常时,代码将不会继续执行。然后,PHP将试图找到第一个赶上比赛。如果是一个例外,没有捕获和处理set_exception_handler(),那么PHP将产生一个严重的错误和输出提示信息未捕获的异常…

当触发异常时,通常会发生异常:
当前代码状态已保存。
代码执行切换到预定义的异常处理器函数。
根据这种情况,处理器可以从保存的代码状态重新启动执行代码,终止脚本的执行,或者继续从代码中的另一个位置执行脚本。

错误和异常评定量表
错误:运行时错误,不能在编译期不如试图输出一个未分配的变量的回声。这样的问题常常导致程序或逻辑无法继续和中断。
例外:在程序执行过程中发生与预期相反,逻辑往往是正确的,但不符合应用场景,如接收预定的格式错误的用户名称,长度,因此,主要取决于异常编码人员做后把做出判断,捕捉异常的变化过程,在处理这些不不中断程序。
PHP对于异常和错误的定义似乎并不明显,尤其是在PHP的较低版本中。
错误和日志记录值常量解释注释
1 e_error(整数)
致命的运行时错误。此类错误一般不可恢复,例如内存分配引起的问题。
2 e_warning(整数)
运行时警告(非致命错误)。只提供提示信息,但脚本不会停止运行。
4 e_parse(整数)
编译时语法分析错误。解析器错误只由解析器生成。
8 e_notice(整数)
运行时通知。它指示脚本可能出现错误,但脚本中可能有类似的通知,通常运行。
16 e_core_error(整数)
PHP的初始化过程的一个致命的错误。这个错误是类似e_error,但它是由PHP引擎核心产生自PHP 4。
32 e_core_warning(整数)
PHP初始化警告(非致命错误)在启动过程中发生。它类似于e_warning,但它是由PHP引擎核心产生自PHP 4。
64 e_compile_error(整数)
致命的编译时错误。e_error相似,但由Zend脚本引擎。因为PHP 4
128 e_compile_warning(整数)
编译时警告(非致命错误)。e_warning类似,但由Zend脚本引擎。因为PHP 4
256 e_user_error(整数)
由用户生成的错误信息。e_error相似,但它是由用户自己使用的PHP函数trigger_error产生()的代码。因为PHP 4
512 e_user_warning(整数)
由用户产生的告警信息。e_warning相似,但它是由用户自己使用的PHP函数trigger_error产生()的代码。因为PHP 4
1024 e_user_notice(整数)
由用户生成的通知信息。e_notice相似,但它是由用户自己使用的PHP函数trigger_error产生()的代码。因为PHP 4
2048 e_strict(整数)
启用PHP修改代码,以确保代码具有最佳的互操作性和向前兼容性。自PHP 5起
4096 e_recoverable_error(整数)
一个致命的错误,可以捕获,显示一个潜在的危险的错误,但也没有引起PHP引擎将处于不稳定的状态。如果错误不是由用户定义的处理了(见set_error_handler()),它将成为一个e_error使脚本将终止。因为PHP 5.2.0
8192 e_deprecated(整数)
运行时通知。启用时,警告将给予代码不可能在未来的版本中正常工作。由于PHP 5.3.0
16384 e_user_deprecated(整数)
用户有更少的警告信息。e_deprecated相似,但它是由用户自己使用的PHP函数trigger_error产生()的代码。因为PHP 5.3.0
30719 e_all(整数)
e_strict出所有错误和警告information.30719 PHP 5.3,X,6143在PHP 5.2 x,2047之前。

二,error_reporting()和试钓,扔
error_reporting()函数可以得到(不通过时的参数),设置脚本来处理异常(不是所有的例外情况需要处理,如e_core_warning,e_notice和e_deprecated可以忽略),异常处理将覆盖集的error_reporting选项定义在php.ini设置。
例如:
error_reporting(e_all ~ e_notice); / / e_notice除了其他异常将引起(对e_all ~ e_notice二进制运算的结果是:e_notice对应的位设置为0)try catch不能在课堂__autoload自动加载(效果)。
try catch不能用来捕获异常并不能捕获错误,如trigger_error()引发的错误和异常和错误是不同的。
复制代码代码如下所示:
尝试{
您的代码可能会导致错误
} catch(异常错误):这个错误对象需要声明类型,异常是系统默认异常类。
echo $错误- > GetMessage();
}

抛出可以抛出异常,例如:
抛出新的异常(一个错误);
一个例子:
{试
如果(空($ VAR1))把新notemptyexception();
如果(空($ VAR2))把新notemptyexception();
如果(!preg_match())把新invalidinputexception();
元模型>写入();
$模板->渲染(''成功');
} catch(notemptyexception e){
$模板->渲染('error_empty);
} catch(invalidinputexception e){
$模板->渲染('error_preg);
}
{代码}
异常类的结构:大多数方法没有重写(最后)
复制代码代码如下所示:
{例外
属性
受保护字符串$消息;
受保护的int代码;
受保护字符串$文件;
受保护的int行;
方法
公共__construct({字符串消息=} {代码= 0,int $ {,例外前=零} } }美元)
最后的公共字符串GetMessage(void) / /异常信息
最后的公开的例外getprevious(void) / /前一个例外
最后的公共属性获得按键的ASCII码(void) / /异常代码,这是一个自定义的
最后的公共字符串GetFile(void) / /异常文件路径
最后公开int getline(void) /异常线
最后公开阵列gettrace(void) /异常跟踪信息(阵列)
最后gettraceasstring字符串(void) /异常跟踪信息(字符串)
公共字符串__tostring(void) / /直接将一个字符串调用子程序时,返回一个值的异常对象
私人最终无效__clone(void) / /呼叫异常克隆对象
}

扩展的异常类
try catch可以有多个catch子句,从第一个catch子句,如果在变量类型的例外条款,抛出声明抛出异常的类型,这一条款将不执行其他catch子句被执行,否则继续尝试一个catch子句,因为异常是所有异常类的基类,所以抛出异常会和他在一起,如果你喜欢不同类型的异常使用不同的处理方法,应该放在异常类型的catch子句结束。
异常是所有异常的基类,您可以根据实际需要扩展异常类。
复制代码代码如下所示:
类myexception延伸例外{
公共errtype = 'default;
公共功能__construct($ errtype =){
美元-> errtype = $ errtype;
}
}
抛出新的(myexception); / /抛出一个异常
尝试{
您的代码可能会导致错误
} catch(myexception $ ERR){ / /这错误对象需要声明的类型
echo $错误- > errtype();
} catch(errorexception $ ERR){ / / errorexception是一个异常类添加到PHP 5,继承的例外
echo'error!;
} catch(异常错误){
重定向(;
}

您可以在catch子句中决定异常的类型,或者根据信息(如代码)决定是否处理异常。如果卸载catch子句的代码,不能正确处理捕获的异常,则可以继续在catch子句中抛出异常。

三、异常异常回调函数
复制代码代码如下所示:
set_exception_handler(回调函数名) / /异常异常或其子类将调用这个函数
功能exceptionhandlerfun($ errobj){ / /例外只有一个参数的回调函数,异常对象被抛出。
/……
}

异常异常回调函数并不能像set_error_handler回调函数返回的是消除异常真实,即使回调功能异常,随后的代码将不能继续,所以要继续执行下面的代码必须使用try-catch。
但是有一个例外:可以执行脚本关闭回调函数,即使没有处理,也可以执行抛出的异常。
register_shutdown_function(回调函数名{,论证1,论证2,…});
例如:
复制代码代码如下所示:
功能关机功能(){
echo'script结束;
}

register_shutdown_function(关机功能);
因为关机功能()是在脚本执行结束,它可以调用任何函数在脚本中的回调函数,即使函数是错误的位置在定义。

四、trigger_error(字符串errormsg {,int user_error_type })
此功能用于主动触发一个错误:user_error_type只能e_all,e_user_error,价值e_user_warning,e_user_notice、或其组合。
set_error_handler(考尔贝克函数名{,user_error_type }); / / trigger_error()设置一个回调函数来处理错误,包括错误和用户的系统中使用trigger_error()函数来触发误差。
可选参数user_error_type:
如果设置了这个参数,错误类型被trigger_error符合定义范围内的user_error_type触发回调函数。
这个值的设置类似于error_reporting()函数。
第一个参数(考尔贝克函数名):
函数名,函数有5个参数,其中前2个参数是必需的:
trigger_error user_error_type,trigger_error抛出一个errormsg文件,错误的方式,绝对力量抛出,抛出一个错误,当错误的上下文的行数(一个数组包含trigger_error()函数,所有的变量,如数据所在的范围内)
回调函数的返回值:如果false返回,系统错误处理机制仍然抛出错误,返回true或不返回值,消除错误。
的trigger_error()引发的错误不是由try catch语句捕获异常捕获。