1、register_shutdown_function

使用场景:当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,这个函数会被调用。

函数介绍:

void register_shutdown_function(callback $callback[.mixed $parameter]);

Registers a callback to be executed after script execution finishes or exit() is called.

下面我们看一个例子:

<?php
//只有一行代码的脚本
require_once '123';

*报错如下*

Warning: require_once(123): failed to open stream: No such file or directory in......index.php on line 33

Fatal error: require_once(): Failed opening required '123' (include_path='.;C:\php\pear') in ......index.php on line 33

我们使用这个函数后的代码如下:

<?php 

/**
* 在脚本开始处设置一个标识$flag为false。
* 当程序执行到末尾,令其为true。
* 如果在执行过程中发生了错误而调用register_shutdown_function函数
* 那么这个标识位仍然为false。以此来判断是否发生错误。
* */
$flag = false;
// 此函数用于判断是否发生错误
function callError(){
global $flag;
if($flag==true){
echo "正常!";
}else{
die("我错了,呜呜呜");
}
return false;
}
register_shutdown_function(callError());
//制造致命错误
require_once '123'; $flag = true;
*执行结果*

我错了,呜呜呜

推荐阅读>>

PHP register_shutdown_function函数的深入解析

PHP register_shutdown_function函数详解

2、set_error_handler()

使用场景:该函数用于创建运行期间的用户自己的错误处理方法。

可以用来屏蔽错误信息,防止将一些信息暴露给用户;可以记录错误信息,即使发现生产环境出现的问题;可以做相应的处理,出错时可以显示跳转到预先定义好的出错页面,提供更好的用户体验;可以作为调试工具。

使用方法:

set_error_handler(error_function,error_types);

error_function:必须,规定发生错误时运行的函数

error_types:可选,规定在哪个错误报告级别会显示用户定义的错误,默认是"E_ALL".

提示:如果使用了该函数,会完全绕过标准的PHP错误处理函数,如果必要,用户定义的错误处理程序必须终止(die())脚本。

注释:如果在脚本执行前发生错误,由于那时自定义程序还没注册,将不会用到这个自定义错误处理程序。

下面上一个简单的代码:

<?php
/**
* 下面为自定义的错误处理函数
* 注意注意再注意:这个函数一定要有四个输入变量$errno,$errstr,$errfile,$errline
* */
function my_error_handler($errno,$errstr,$errfile,$errline)
{
//在这里,就不做具体的错误处理了,咱们看一下传入的参数都是什么吧
var_dump($errno);
var_dump($errstr);
var_dump($errfile);
var_dump($errline);
die("出错了,结束吧!");
}
set_error_handler("my_error_handler");
require '123';
*结果*

int 2
string 'require(123): failed to open stream: No such file or directory' (length=62)
string '......1.php' (length=31)
int 16
出错了,结束吧!

具体实现,强烈推荐阅读下面这篇文章,总结的很详细>>PHP set_error_handler()函数的使用

3、set_exception_handler()

使用场景:该函数用于创建运行时期间的用户自己的异常处理方法

函数定义:string set_exception_handler ( callback $exception_handler )

参数:必须,规定未捕获的异常发生时调用的函数

说明:该函数必须在调用set_exception_handler()函数之前定义。这个异常处理函数需要一个参数,即抛出的exception对象

提示和注释:在这个异常处理程序被调用后,脚本会停止执行。

下面甩出代码:

<?php 

function exception_handler($exception) {
echo "Uncaught exception: " , $exception->getMessage(), "\n";
} set_exception_handler('exception_handler'); throw new Exception('Uncaught Exception');
echo "Not Executed\n";

推荐阅读>>http://php.net/manual/en/function.set-exception-handler.php

php设定错误和异常处理可使用的函数的更多相关文章

  1. PHP设定错误和异常处理三函数

    register_shutdown_function(array('Debug','fatalError')); //定义PHP程序执行完成后执行的函数 set_error_handler(array ...

  2. thinkphp3.2源码(错误和异常处理)

    写在前面:tp3.2中每次载入入口文件时都会进行错误和异常的捕获,解读这一部分代码可以对以后的优化很有好处.   处理概览:          错误捕获与处理: 致命错误捕获: 我们尝试在 Home/ ...

  3. PHP10 错误和异常处理

    学习要点 修改错误报告级别 写错误日志 异常处理实现 自定义异常 捕获多路异常   错误处理 定义 错误:开发过程中的失误.用户操作引起的错误. 错误产生原因 语法错误:开发环境提示,未修正则脚本无法 ...

  4. PHP错误以及异常处理

    以前一直觉得php的异常处理没有什么,现在才发现这个还真是门学问,于是狠下心来好好研究了一下,写一篇文章,也作备忘吧. 1. php错误 无论是什么语言编程,都会有如下三种错误,当然php也不例外. ...

  5. Yii中的错误及异常处理

    Yii中的错误及异常处理 Yii已经默认已经在CApplication上实现了异常和错误的接管,这是通过php的set_exception_handler, set_error_handler实现的. ...

  6. 再谈PHP错误与异常处理

    博客好久没有更新了,实在惭愧,最近在忙人生大事,哈哈!这段时间没有看什么新的东西,结合项目中遇到的PHP异常处理问题,我又重新梳理了之前模糊的概念,希望对大家理解PHP异常处理有所帮助. 请一定要注意 ...

  7. Golang错误和异常处理的正确姿势

    Golang错误和异常处理的正确姿势 错误和异常是两个不同的概念,非常容易混淆.很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误.从 ...

  8. 【PHP】解析PHP中的错误和异常处理

    目录结构: contents structure [-] 错误级别 自定义处理器 设置异常日志 自定义异常类 在这篇文章中,笔者将会阐述PHP中的异常处理,希望能够对你有所帮助. 1.错误级别 PHP ...

  9. ThinkPHP5.0源码学习之注册错误和异常处理机制

    在base.php文件中,用一句代码\think\Error::register();实现错误和异常处理机制的注册. // 注册错误和异常处理机制 \think\Error::register(); ...

随机推荐

  1. java Spring boot使用spring反射

    spring 反射 当你配置各种各样的bean时,是以配置文件的形式配置的,你需要用到哪些bean就配哪些,spring容器就会根据你的需求去动态加载,你的程序就能健壮地运行. 1.可以通过类名去实例 ...

  2. CSS流布局权威指南

    http://www.cnblogs.com/qieguo/p/5421252.html

  3. springmvc常用jar包

    <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans ...

  4. 实现一个简单版的express

    express应该算是早期最优秀的一个node框架了,刚开始学node做后端语言就是用的express,它的cli可以帮我们搭建好项目目录,就像现在的vue,react一样.express本身没有做太 ...

  5. eclipse 关闭validating

    1.起因 validating XXX  总是非常的浪费时间,有时候还会造成程序卡死 2.解决 windows - Perferences - Validation build 全部去掉

  6. APP功能性测试-4

    弱网络测试 使用fiddler模拟低速环境 使用fiddler抓取手机上某个应用的包 手机连接fiddler fiddler 代理地址127.0.0.1默认端口8888 只抓http协议(https, ...

  7. Lua工具类

    1.打印table --一个用以打印table的函数 function print_r (t, name) print(pr(t,name)) end function pr (t, name, in ...

  8. C# 结构类型与类的区别

    结构类型是值类型:类是引用类型: 内存位置不同,结构类型在应用程序的堆栈中:类对象在托管中: 是否改变源对象

  9. tarball

    环境:Linux系统 命令:tar 关键:tar打包出来的文件有没有进行压缩所得到的文件称谓不同 仅是打包,得到的文件我们称为tarfile 包含压缩,得到的文件我们称为tarball

  10. Daily Scrum02 11.29

    今天大家都已经开始了进行第二轮迭代的工作!相比第一轮迭代,每个人都已经有了一定开发经验,这次做起来顺手很多.薛神和肖犇的挑战最大,他们需要实现好友功能,手机间的通信.服务器的搭建都是难点,但他们的热情 ...