php实现实例化类后自动进行错误以及异常处理(简易版)
<?php class App
{
public function __construct()
{
/*
* ini_set 设置配置项
* display_errors 是否在页面显示错误信息
*/
ini_set('display_errors', 0);
$this->setSysHandler();
} public function setSysHandler()
{
//php中止时执行
register_shutdown_function([$this, 'fatalHandler']);
//设置用户自定义的错误处理函数
set_error_handler([$this, 'errorHandler']);
//设置用户自定义的异常处理函数
set_exception_handler([$this, 'exceptionHandler']);
} // 错误被包装成为异常抛出
public function errorHandler($code, $msg, $file, $line)
{
throw new ErrorException($msg, $code, $code, $file, $line);
} public function fatalHandler()
{
if ($errors = error_get_last()) {
$msg = $errors['message'];
$code = $errors['type'];
$file = $errors['file'];
$line = $errors['line'];
echo "<font size='7'>:(</font><h2> 文件: {$file}; 行号: {$line};</h2>";
echo "<h4>错误信息: {$msg}; 错误代码: {$code}</h4>";
echo "<pre>";
}
} public function exceptionHandler($excep)
{
$this->handler($excep);
} public function handler($excep)
{
$msg = $excep->getMessage();//获取异常消息内容
$code = $excep->getCode();//获取异常代码
$file = $excep->getFile();//创建异常时的程序文件名称
$line = $excep->getLine();//获取创建的异常所在文件中的行号
$trace = $excep->getTrace();//获取异常追踪信息
$this->errorlog($msg, $code, $file, $line);//发送错误信息到某个地方
echo "<font size='7'>:(</font><h2> 文件: {$file}; 行号: {$line};</h2>";
echo "<h4>错误信息: {$msg}; 错误代码: {$code}</h4>";
echo "<pre>";
if ($excep instanceof ErrorException) {
array_shift($trace);
}
print_r($trace);
//函数的调用栈
} public function errorlog($msg, $code, $file, $line)
{
$str = date('Y-m-d H:i:s') . "\r\n";
$str .= "错误信息是:";
$str .= $msg;
$str .= "\r\n";
$str .= "错误行号是:";
$str .= $line;
$str .= "\r\n";
$str .= "错误代码是:";
$str .= $code;
$str .= "\r\n";
$str .= "错误行文件:";
$str .= $file;
$str .= "\r\n";
$str .= "\r\n";
error_log($str, 3, './myerror.log');
}
} $app = new App();
原文链接:https://blog.csdn.net/qq_20025577/article/details/85059762
php实现实例化类后自动进行错误以及异常处理(简易版)的更多相关文章
- 再谈 tp的 实例化 类 的自动加载
表示一个域名下的所有/任何主机 使用 的格式是: [*.] example.com 其中 , example.com叫着 裸域名. (这个example.com/net/org不能被注册, 被保留) ...
- C语言中存储类别又分为四类:自动(auto)、静态(static)、寄存器的(register)和外部的(extern)。
除法运算中注意: 如果相除的两个数都是整数的话,则结果也为整数,小数部分省略,如8/3 = 2:而两数中有一个为小数,结果则为小数,如:9.0/2 = 4.500000. 取余运算中注意: 该运算只适 ...
- final关键字,类的自动加载,命名空间
final关键字 1.final可以修饰方法和类,但是不能修饰属性: 2.Final修饰的类不能被继承: 3.Fina修饰的方法不能被重写,子类可以对已被final修饰的父类进行访问,但是不能对父类的 ...
- PHP面向对象学习-属性 类常量 类的自动加载 构造函数和析构函数 访问控制(可见性)
在类的成员方法里面,可以用 ->(对象运算符):$this->property(其中 property 是该属性名)这种方式来访问非静态属性.静态属性则是用 ::(双冒号):self::$ ...
- [WPF自定义控件库] 让Form在加载后自动获得焦点
原文:[WPF自定义控件库] 让Form在加载后自动获得焦点 1. 需求 加载后让第一个输入框或者焦点是个很基本的功能,典型的如"登录"对话框.一般来说"登录" ...
- 浅析PHP类的自动加载和命名空间
php是使用require(require_once)和include(include_once)关键字加载类文件.但是在实际的开发工程中我们基本上不会去使用这些关键字去加载类. 因为这样做会使得代码 ...
- Springboot项目启动后自动创建多表关联的数据库与表的方案
文/朱季谦 在一些项目开发当中,存在这样一种需求,即开发完成的项目,在第一次部署启动时,需能自行构建系统需要的数据库及其对应的数据库表. 若要解决这类需求,其实现在已有不少开源框架都能实现自动生成数据 ...
- linux上监控tomcat down掉后自动重启tomcat
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...
- Java线程监听,意外退出线程后自动重启
Java线程监听,意外退出线程后自动重启 某日,天朗气清,回公司,未到9点,刷微博,顿觉问题泛滥,惊恐万分! 前一天写了一个微博爬行程序,主要工作原理就是每隔2分钟爬行一次微博,获取某N个关注朋友微博 ...
随机推荐
- Shell-07-文本处理grep
文本处理sed sed:流编辑器,过滤和替换文本 工作原理:sed命令将当前处理的行读入模式空间进行处理,处理完把结果输出,并且清空模式空间. 然后再将下一行读入模式空间进行处理输出,以此类推,直到最 ...
- Linux搭建Syslog服务器
在大多数据的Linux发行版中,rsyslog是一个预先安装的标准日志后台进程.在 客户端/服务端 的系统配置中,rsyslog 能扮演两个角色;作为一个日志服务器能从其它设备收集日志信息,而作为一个 ...
- NOIP 模拟 $31\; \rm Cover$
题解 \(by\;zj\varphi\) 因为对于所有区间,都只有包含和被包含关系,这就是一个树形结构. 设 \(\rm f_{i,j}\) 表示在第 \(\rm i\) 个节点,最多被覆盖 \(\r ...
- mysql导出word的表结构操作
mysql导出word的表结构操作 1.首先准备好mysql的相关插件mysql-connector-odbc和DBExportDoc 百度网盘地址: 链接:https://pan.baidu.com ...
- idea中导包出现import org.apach.*,提交代码老出现冲突,不想使用.*的设置
打开设置>Editor>Code Style>Java>Scheme Default>Imports ① 将Class count to use import with ...
- visual studio code 中文
1.按住ctrl+shift+p键,在框中输入configure,在下拉选项中选取language选项 2.打开locale.json文件,修改语言配置 3.修改完保存,然后重新启动vscode 4. ...
- Linux 记录学习
- 【java web】监听器listener
一.简介 Java的监听器,也是系统级别的监听.监听器随web应用的启动而启动.Java的监听器在c/s模式里面经常用到,它会对特定的事件产生产生一个处理.监听在很多模式下用到,比如说观察者模式,就是 ...
- 十三:Servlet3.0的异步
servlet之前的操作同时同步的,就是按照这样的一个流程来走的: 1.请求根据一个路径路由到一个servlet中, 2.servlet获取一系列的参数 3.执行一系列的逻辑(花费时间所占的比重也更大 ...
- javacc在stanfordnlp中的应用
总结: 这个javacc感觉比较复杂,在于stanfordnlp中 p.p1 { margin: 0; font: 11px Monaco } CoreMapExpressionExtractor这个 ...