错误和异常 (一):错误基础知识

思维导图:

file

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 (错误的预定义常量)

转载自我的博客:毛乐的个人博客

php
本帖由 Summer 于 2个月前 加精
讨论数量: 2
Ali

总结的很好。

2个月前
klusfq

:sob:终于找到一篇能把php错误异常机制讲得通俗易懂的文章了,感谢楼主!!!

1个月前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!