<?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实现实例化类后自动进行错误以及异常处理(简易版)的更多相关文章

  1. 再谈 tp的 实例化 类 的自动加载

    表示一个域名下的所有/任何主机 使用 的格式是: [*.] example.com 其中 , example.com叫着 裸域名. (这个example.com/net/org不能被注册, 被保留) ...

  2. C语言中存储类别又分为四类:自动(auto)、静态(static)、寄存器的(register)和外部的(extern)。

    除法运算中注意: 如果相除的两个数都是整数的话,则结果也为整数,小数部分省略,如8/3 = 2:而两数中有一个为小数,结果则为小数,如:9.0/2 = 4.500000. 取余运算中注意: 该运算只适 ...

  3. final关键字,类的自动加载,命名空间

    final关键字 1.final可以修饰方法和类,但是不能修饰属性: 2.Final修饰的类不能被继承: 3.Fina修饰的方法不能被重写,子类可以对已被final修饰的父类进行访问,但是不能对父类的 ...

  4. PHP面向对象学习-属性 类常量 类的自动加载 构造函数和析构函数 访问控制(可见性)

    在类的成员方法里面,可以用 ->(对象运算符):$this->property(其中 property 是该属性名)这种方式来访问非静态属性.静态属性则是用 ::(双冒号):self::$ ...

  5. [WPF自定义控件库] 让Form在加载后自动获得焦点

    原文:[WPF自定义控件库] 让Form在加载后自动获得焦点 1. 需求 加载后让第一个输入框或者焦点是个很基本的功能,典型的如"登录"对话框.一般来说"登录" ...

  6. 浅析PHP类的自动加载和命名空间

    php是使用require(require_once)和include(include_once)关键字加载类文件.但是在实际的开发工程中我们基本上不会去使用这些关键字去加载类. 因为这样做会使得代码 ...

  7. Springboot项目启动后自动创建多表关联的数据库与表的方案

    文/朱季谦 在一些项目开发当中,存在这样一种需求,即开发完成的项目,在第一次部署启动时,需能自行构建系统需要的数据库及其对应的数据库表. 若要解决这类需求,其实现在已有不少开源框架都能实现自动生成数据 ...

  8. linux上监控tomcat down掉后自动重启tomcat

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...

  9. Java线程监听,意外退出线程后自动重启

    Java线程监听,意外退出线程后自动重启 某日,天朗气清,回公司,未到9点,刷微博,顿觉问题泛滥,惊恐万分! 前一天写了一个微博爬行程序,主要工作原理就是每隔2分钟爬行一次微博,获取某N个关注朋友微博 ...

随机推荐

  1. Python语言系列-05-模块和包

    自定义模块 #!/usr/bin/env python3 # author:Alnk(李成果) # 为什么要有模块?(内置函数不够用) # 和操作系统打交道 # 和python解释器打交道 # 和时间 ...

  2. Java服务突然失败:A fatal error has been detected by the Java Runtime Environment的总结

    服务启动以后过段时间自动失败:A fatal error has been detected by the Java Runtime Environment 控制台中的错误信息 A fatal err ...

  3. SpringBoot开发十三-检查登录状态

    需求介绍-检查登录状态 防止用户知道我们的一些功能的链接,直接就进到了该页面,就像有些功能是管理员访问才能进的,就需要进行登录状态的判断. 我们知道这个功能点很多其他的功能点都需要使用,所以我们需要使 ...

  4. 说说XXE漏洞那些事

    想不起来写点啥了,又是摸鱼的一天,看了一些红队大佬们整理的资料,非常精彩,于是一个咸鱼翻身先选了一些简单的小点来写一写个人的感想(后续会继续更新其他内容) 不能说写的是技术分享,因为师傅们的文章珠玉在 ...

  5. Git(12)-- Git 分支 - 分支简介

    @ 目录 1.分支简介 1.1.初始化并首次提交 首次提交对象及其树结构: git 的 cat-file 的命令用法: 1.2.修改并第二次提交 第二次提交对象及其树结构: 1.3.修改并第三次提交 ...

  6. SQL 练习27

    查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列 SELECT cid,AVG(score) 平均成绩 from sc GROUP BY cid ORDER BY A ...

  7. java实现随机字母数字验证码

    生成随街验证码 VerifyCode 工具类 package com.meeno.common.cerifycode; import javax.imageio.ImageIO; import jav ...

  8. C# prism 框架

    定义Region (RegionManager) 定义Region 的方式有两种,一个是在XMAL界面指定,另一种这是代码当中指定. RegionManager.RegionName(XMAL) Re ...

  9. uwp之图片旋转动画实现

    参考网址:https://blog.csdn.net/hzw2945/article/details/72467820 https://www.cnblogs.com/changbaishan/p/3 ...

  10. 【mysql】截取查询分析

    1. 慢查询日志 1.1 是什么 (1)MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL ...