概述
异常和错误
示例:
$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 捕获的
错误的分类
如何实现捕获错误
// 注册一个会在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 () 捕获。所以两者结合能出现很好的功能。
小结
三个函数实现自动捕获异常和错误
推荐教程:《PHP视频教程》
以上就是直击PHP的异常和错误处理的详细内容,更多请关注靠谱客其它相关文章!
最后
以上就是背后早晨为你收集整理的直击PHP的异常和错误处理的全部内容,希望文章能够帮你解决直击PHP的异常和错误处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复