异样以及谬误
示例:
$num = 0; try { echo 1/$num; } catch (Exception $e){ echo $e->getMessage();//其实不能执行到这里 } //阐明try{}catch{}是用于捕捉异样的,而谬误是不克不及捕捉到的。 //手动抛出异样进行捕捉 $num = 0; try { if($num == 0){ //经过if判别能够解决谬误,手动抛出异样(若何完成主动捕捉谬误呢,需连系三个php内置函数) throw new Exception('除了数为零'); } echo 1/$num; } catch (Exception $e){ echo $e->getMessage(); }
甚么是异样
顺序正在运转中呈现没有合乎预期的状况,容许发作(你也没有想让他呈现没有失常的状况)但他是一种没有失常的状况,依照咱们的失常逻辑本不应出的谬误,但依然会呈现的谬误,属于逻辑以及营业流程的谬误,而没有是编译或许语法上的谬误。
甚么是谬误
属于 php 剧本本身的成绩,年夜局部状况是由谬误的语法,效劳器环境招致,使患上编译器无奈经过反省,乃至无奈运转的状况。warning、notice 都是谬误,只是他们的级别没有同罢了,而且谬误是不克不及被 try-catch 捕捉的
谬误的分类
Fatal Error: 致命谬误(剧本终止运转)
E_ERROR // 致命的运转谬误,谬误无奈规复,暂停执行剧本
E_CORE_ERROR // PHP 启动时初始化进程中的致命谬误
E_COMPILE_ERROR // 编译时致命性错,就像由 Zend 剧本引擎天生了一个 E_ERROR
E_USER_ERROR // 自界说谬误音讯。像用 PHP 函数 trigger_error(谬误类型设置为:E_USER_ERROR)
Parse Error:编译时解析谬误,语法谬误(剧本终止运转)
E_PARSE // 编译时的语法解析谬误
Warning Error:正告谬误(仅给出提醒信息,剧本没有终止运转)
E_WARNING // 运转时正告 (非致命谬误)。
E_CORE_WARNING // PHP 初始化启动进程中发作的正告 (非致命谬误) 。
E_COMPILE_WARNING // 编译正告
E_USER_WARNING // 用户孕育发生的正告信息
Notice Error:告诉谬误(仅给出告诉信息,剧本没有终止运转)
E_NOTICE // 运转时告诉。示意剧本遇到可能会体现为谬误的状况.
E_USER_NOTICE // 用户孕育发生的告诉信息。
5 类是孕育发生 ERROR 级此外谬误,这类谬误间接招致 PHP 顺序加入。辨别是 ERROR = E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_PARSE
若何完成捕捉谬误
完成用 try {} catch (Exception $e){} 捕捉异样的形式,来捕捉谬误,需借助三个函数
// 注册一个会正在php停止时执行的函数 register_shutdown_function('myShutdownFunction'); function myShutdownFunction() { if ($error = error_get_last()) { var_dump('<b>register_shutdown_function: Type:' . $error['type'] . ' Msg: ' . $error['message'] . ' in ' . $error['file'] . ' on line ' . $error['line'] . '</b>'); } }
//注册异样解决函数, 不捕捉解决的异样,将对立再这里解决 set_exception_handler('myException'); function myException($exception) { var_dump("<b>set_exception_handler: Exception: " . $exception->getMessage() . '</b>'); }
//注册谬误解决函数 set_error_handler('myError'); function myError($type, $message, $file, $line) { //var_dump('<b>set_error_handler: ' . $type . ':' . $message . ' in ' . $file . ' on ' . $line . ' line .</b><br />'); throw new Exception($message); }
捕捉一切谬误的原理
由 set_error_handler () 可知,他可以捕捉一局部谬误,不克不及捕捉零碎级 E_ERROR、E_PARSE 等谬误,然而这局部能够由 register_shutdown_function () 捕捉。以是二者连系能呈现很好的性能。
小结
三个函数完成主动捕捉异样以及谬误
set_error_handler () 只可以捕捉局部谬误
register_shutdown_function () 连系 set_error_handler () 函数,能捕捉一切谬误
set_exception_handler () 用于捕捉异样
error_get_last () 最初终止谬误信息
正在捕捉谬误的函数中,再手动抛出异样,即完成 set_exception_handler 可以捕捉谬误。
保举教程:《PHP视频教程》
以上就是直击PHP的异样以及谬误解决的具体内容,更多请存眷资源魔其它相干文章!
标签: php开发教程 php开发资料 php开发自学 处理异常
抱歉,评论功能暂时关闭!