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个关注朋友微博 ...
随机推荐
- The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path 问题解决记录
1.问题 启动Tomcat之后,在浏览器输入IP后显示503,查看catalina.log发现报错: 2.问题定位:缺少 tomcat-native library 就是说 缺少Tomcat Nati ...
- SpringBoot开发九-生成验证码
需求介绍-生成验证码 先生成随机字符串然后利用Kaptcha API生成验证图片 代码实现 先在pom.xml引入 <dependency> <groupId>com.gith ...
- 微信SDK的使用
一.导入依赖 <!--微信支付--> <dependency> <groupId>com.github.wxpay</groupId> <arti ...
- SQL 练习18
按各科成绩进行排序,并显示排名, Score 重复时保留名次空缺 SELECT t.cid,t.sid,t.score ,COUNT(t1.score)+1 as 排名 from sc as t LE ...
- Charles 抓包 Client SSL handshake failed - Remote host closed connection during handshake
Charles 抓包 https 报错: Client SSL handshake failed - Remote host closed connection during handshake # ...
- wpf 中的矩形的歪斜
<Grid> <Rectangle x:Name="rect12" Width="100" Opacity="1" Hei ...
- Ubuntu系统开放指定端口
今天在一台Ubuntu服务器里面配置了一个Nginx服务,监听的8080端口.本机可以访问,但是局域网就是访问不到.首先怀疑防火墙没有开放8080端口,设置ufw防火墙开放8080端口 $ sudo ...
- spring知识点(面试题)
转自(参考):https://baijiahao.baidu.com/s?id=1595722523154435312&wfr=spider&for=pc 本人收集了一些在大家在面试时 ...
- 深入浅出Mybatis系列(二)---Mybatis入门
一.Mybatis环境搭建及简单实例 1. 新建web项目, 添加依赖包:mybatis包.数据库驱动包(我使用的是mysql).日志包(我使用的是log4j), 由于我的是maven项目, 那么添加 ...
- 徒手撸一个简单的RPC框架
来源:https://juejin.im/post/5c4481a4f265da613438aec3 之前在牛逼哄哄的 RPC 框架,底层到底什么原理得知了RPC(远程过程调用)简单来说就是调用远程的 ...