我想我会把我的两分钱投入到这个花盆中,讨论一下我通常使用什么,无论是按原样使用还是使用小的定制,用于我构建的PHP库,而其他开发人员经常使用这些库。

我将程序执行过程中可能出现的错误细分为两类:那些是错误编程的结果,以及那些由于用户错误或一些外部因素而发生的错误。对于前者,我将trigger_error与e_user_error结合使用,后者是一个异常,特别是一个包异常,然后由库中的所有其他异常继承。

开发错误的一个例子是在一个期望是字符串(V7之前)的参数中传递一个整数,或者访问一个不存在的类的方法或属性。(您可以在这里使用自己的开发人员想象力。)显然,另一个开发人员不会在意错误是在“get”或“set”语句或其他一些神奇构造的内部深处生成的,而是希望知道错误的具体位置。让我们面对现实吧……开发人员不想涉过回溯。

因此,我用来定位错误消息的方法很简单:

function localize_error_msg($msg, $level) {

$level = (int)$level;

$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, $level + 1)[$level];

return $msg . " in " . $backtrace['file'] . " on line " . $backtrace['line'];

}

我传入的回溯级别取决于所使用的构造,通常是1或2,其余的都是不言而喻的。

为了防止“i n file on line n”的重复序列,我添加了这个错误处理程序:

set_error_handler(function($errno, $errstr, $errfile, $errline) {

if (preg_match('/on line \d+$/', $errstr) === 1)

die($errstr);

else return false;

}, E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE);

同样,我喜欢保持简单。可以说,错误消息的本地化应该发生在处理程序中,但是之后,您必须能够传递深度,这在处理程序中又增加了两个层次,并且,在这之后会变得混乱。

快乐小径!

php提示行号,在php中使用trigger_错误时如何获得正确的行号?相关推荐

  1. 【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )

    文章目录 前言 一.Android 命令行与 PC 可执行 JAR 文件不兼容 二.Android 命令行使用 dalvik 命令不能直接执行 Kotlin 编译的 dex 文件 前言 尝试在 And ...

  2. html首行缩进在CSS中的代码,如何在div+css实现首行缩进

    用word文档实现段落首行缩进是一件相当容易的事,你只需打开段落对话框,在里面进行相关设置即可.那么在div+css中该如何实现呢?今天我们一起来学习一下. 所谓首行缩进,就是每段前空两个汉字.所以在 ...

  3. 在 vs code 中使用 go 插件时相关工具的正确安装方式

    前言 最近在学习 go 语言,当然编辑器用的还是最熟悉的 vs code 了. 虽然说 vs code 着实很占内存,但是没办法,谁让他配置起来方便快捷,并且对于前端程序员来说,着实是一大开发利器. ...

  4. 关于“System.Data.OleDb.OleDbException,外部数据库驱动程序 (1) 中的意外错误。”的解决方案

    背景: 客户在导入格式为xls的excel文件,发生了错误(下面是我用程序重现的错误的信息). 未处理System.Data.OleDb.OleDbExceptionHResult=-21474672 ...

  5. php中常见的错误类型有,JavaScript编程中会出现的错误类型有哪些?错误类型介绍...

    JavaScript编程中会出现的错误类型有哪些?本篇文章就给大家介绍在JavaScript编程中出现的几种常见的错误类型.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助.[相关视频教 ...

  6. ASP 中常见的错误 80004005 信息

    ASP 中常见的错误 80004005 信息 错误信息 Microsoft JET Database Engine 错误 '80004005' 未指定的错误 (Provider 错误) 原因: 权限问 ...

  7. 微信二次修改微信号_微信号怎么改第二次?微信7.0.15版本改微信号方法解析

    微信7.0.15版本是最近出来的一个版本,可以修改微信号,赢得了很多用户的关注,那么具体的修改方法是什么?下面就是对相关内容的介绍,感兴趣的话可以一起来了解下. 微信支持修改微信号操作流程 在7.0. ...

  8. linux进入vi永久显示行数,mac/linux中vim永久显示行号、开启语法高亮

    步骤1: cp /usr/share/vim/vimrc ~/.vimrc 先复制一份vim配置模板到个人目录下 注:redhat 改成 cp /etc/vimrc ~/.vimrc 步骤2: vi ...

  9. 错误使用 load ASCII 文件的行号 1 中的文本未知“MATLAB“。

    求助: 想打开一个.mat文件就一直出现这个:错误使用 load   ASCII 文件的行号 1 中的文本未知"MATLAB 换了importdata也不行 救命

最新文章

  1. 正则表达式——全部符号解释(详解)
  2. jQueryHTMLCSS3实现垂直手风琴折叠菜单方法讲解
  3. Java并发编程-synchronized底层原理
  4. LabVIEW2020下载与安装教程
  5. 从零基础入门Tensorflow2.0 ----九、44.4 签名函数转换成savedmodel
  6. 网站自动跳转代码大合集
  7. Origin2018安装教程
  8. 利用BioEdit做多序列一致性比对
  9. rest_framework学习之序列化(Serializer)
  10. python入门系列(4) -- python常见应用
  11. Dojo1.11官方教程文档翻译(3.4)Dojo特效
  12. 将OKRA-ERP配置成固定资产实物管理全过程
  13. TemplateDoesNotExist错误之伤
  14. 获得root权限的命令 su和sudo命令
  15. vue中防止按钮重复点击提交的方法
  16. php 画布插入图像,PHP图片处理之图片背景、画布操作
  17. LPF与HPF是什么意思?
  18. l流程图平行四边形_关于写作那些事之快速上手Mermaid流程图
  19. 武汉大学计算机学院 推免,2012年武汉大学计算机学院推免研究生计分细则
  20. 黄斑裂孔易致失明,年长者和高度近视者尤其要注意!

热门文章

  1. [蓝桥杯][2017年第八届真题]包子凑数(解题报告)
  2. PHP 5.5.38 + mysql 5.0.11 + zabbix3.0 + nginx 安装
  3. 领域驱动设计(DDD:Domain-Driven Design)
  4. python 安装模块步骤
  5. maven项目下tomcat直接启动不了(LifecycleException)。报错如下截图
  6. 浏览器下载图片的方法,修改报文来实现。
  7. mknod创建设备(加载新的设备驱动时候,通常会用到此命令)
  8. 网易笔试题——计算机视觉_深度学习方向
  9. 人工智能工程师学习路线及具备的5项基本技能
  10. 基于谱减法的声音去噪