错误和异常 (一):错误基础知识
思维导图:
1 什么叫错误
书面一点的解释:php脚本自身原因,大部分是由于错误的语法,或者服务器环境造成的php脚本无法通过编译,或者无法正常执行的情况。
注意:
1 并不是所有的错误都会造成脚本无法运行,部分错误发生后脚本继续运行
2 正常情况下,错误并不能被try catch捕捉
2 错误的级别
1 Parse error 解析错误 (脚本不能继续执行)
解析错误举例:
代码未以分号结尾
$num = 0 //运行结果:Parse error: syntax error, unexpected 'echo' (T_ECHO)
2 Fatal error 致命错误 (脚本不能继续执行)
致命错误举例:
调用未定义的函数
test(); //运行结果:Fatal error: Uncaught Error: Call to undefined function test()
3 Warning 警告(给出错误信息,脚本继续运行)
警告举例:
除以0
1000 /0; 运行结果:Warning: Division by zero
4 Notice 注意 (给出错误信息,脚本继续运行)
注意错误举例:
输出未定义的变量
echo $a; //运行结果:Notice: Undefined variable: a
5 deprecated:最低级别的错误 (脚本继续运行)
在php7以下版本会出现
3 必知必会函数
1 error_report 设置错误的报告级别
在工作中我们经常会用到这个函数来设置php的错误报错,比如忽略notice报告:error_reporting(E_ALL ^ E_NOTICE);
可用版本:(PHP 4, PHP 5, PHP 7)
用法:error_reporting ([ int $level ] ) : int
level参数是错误的预定义常量
实例:
<?php
// 关闭所有PHP错误报告
error_reporting(0);
// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// 报告 E_NOTICE也挺好 (报告未初始化的变量
// 或者捕获变量名的错误拼写)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
// 除了 E_NOTICE,报告其他所有错误
error_reporting(E_ALL ^ E_NOTICE);
// 报告所有 PHP 错误 (参见 changelog)
error_reporting(E_ALL);
2 set_error_handler 设置用户自定义的错误处理函数
这个函数可以按照你自己定义的方式来处理错误,在后面的专题还会详细的讲解,这里先简单讲解一下
可用版本:(PHP 4 >= 4.0.1, PHP 5, PHP 7)
说明:set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] ) : mixed
参数解释:
$error_handler : 我们自己自定义的函数
$error_types:错误的预定义常量, error_types 里指定的错误类型都会绕过 PHP 标准错误处理程序, 除非回调函数返回了 FALSE
实例:
<?php
set_error_handler('myErrorFun'); //把php原始的错误处理机制,变成我们的myErrorFun函数处理
function myErrorFun($errno, $message, $file, $line)
{
echo '错误码是:'.$errno.'</br>';
echo '错误的信息是'.$message.'</br>';
echo '错误的文件是:'.$file.'</br>';
echo '错误的行数是'.$line;
}
echo $a; //a是未定义的变量
//打印结果:
错误码是:8
错误的信息是Undefined variable: a
错误的文件是:D:\project\mz_php_server\public\test.php
错误的行数是12
4 错误的相关配置
错误的配置也是我们需要掌握的重要内容
配置文件:php.ini文件
相关配置:
1 错误日志是否打开
log_errors = On (Off)
2 错误日志记录的位置
error_log = php_errors.log
3 是否打开错误显示
display_errors = Off (Off)
4 定义错误显示的级别
error_reporting = E_ALL (错误的预定义常量)
转载自我的博客:毛乐的个人博客
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 Summer
于 5年前 加精
总结的很好。
:sob:终于找到一篇能把php错误异常机制讲得通俗易懂的文章了,感谢楼主!!!