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个关注朋友微博 ...
随机推荐
- PostgreSQL 13.4的安装记录
PostgreSQL 13.4的安装记录 想着MySQL被Oracle给买了,总得做点别的准备不是,找了找别的开源的关系型数据库,貌似PostgreSQL的评价很不错,就试试先 因为是window10 ...
- MATLAB—数组运算及数组化编程
文章目录 前言 一.数组的结构和创建 1.数组及其结构 2.行数组的创建 3.对数组构造的操作 二.数组元素编址及寻访 1.数组元素的编址 2.二维数组元素的寻访 三.数组运算 非数的问题 前言 编程 ...
- luogu P4206 聪聪和可可
聪聪和可可 鸽了两天 \(dijkstra\)预处理出来两点之间的最短路径\(dis\)数组,读题发现,\(cat\)的走位很怪sb斩了,所以我们设一个\(next\)数组,\(next[i][j]\ ...
- NOIP 模拟 6 宝藏
题目 题解 这道题是 \(NOIP\;\;2017\) 的原题 ,让我见识到了什么是真正的 \(dfs\) 考场上想出来要状压了,\(n\) 那么小,肯定是压 \(n\) 那一位,然后层第转移,但是想 ...
- Centos7上yum安装redis
下载tar包 wget http://download.redis.io/releases/redis-6.0.5.tar.gz 解压tar包 tar -zxvf redis-6.0.5.tar.gz ...
- ITIL学习笔记——ITIL入门小知识
1. 什么是ITIL? ITIL即IT基础架构库(Information Technology Infrastructure Library)由英国政府部门CCTA(Central Computing ...
- 关于Ubuntu18.04 linux系统下使用Tim QQ 微信
先配上张图 步骤: 1.1 :需要安装环境deepin-wine 1.1:(你把他理解为jdk就好,没有jdk无法运行java程序,同理没有deepin-wine环境无法运行腾讯产品) 1.2 :去哪 ...
- Executor执行器
Executors: CachedThreadPool 将为每个任务创建一个线程. public class CachedThreadPool { public static void main(S ...
- CNN的Pytorch实现(LeNet)
CNN的Pytorch实现(LeNet) 上次写了一篇CNN的详解,可是累坏了老僧我.写完后拿给朋友看,朋友说你这Pytorch的实现方式对于新人来讲会很不友好,然后反问我说里面所有的细节你都明白 ...
- 【MATLAB】常用命令快速入门,国赛加油
矩阵运算 矩阵的基本生成 m1 = 1:5 % 生成行矩阵[1,2,3,4,5] m2 = 1:2:10 % 起点:步长:终点 [1,3,5,7,9] linspace(x1,x2,n) % 生成 n ...