php提示行号,在php中使用trigger_错误时如何获得正确的行号?
我想我会把我的两分钱投入到这个花盆中,讨论一下我通常使用什么,无论是按原样使用还是使用小的定制,用于我构建的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_错误时如何获得正确的行号?相关推荐
- 【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )
文章目录 前言 一.Android 命令行与 PC 可执行 JAR 文件不兼容 二.Android 命令行使用 dalvik 命令不能直接执行 Kotlin 编译的 dex 文件 前言 尝试在 And ...
- html首行缩进在CSS中的代码,如何在div+css实现首行缩进
用word文档实现段落首行缩进是一件相当容易的事,你只需打开段落对话框,在里面进行相关设置即可.那么在div+css中该如何实现呢?今天我们一起来学习一下. 所谓首行缩进,就是每段前空两个汉字.所以在 ...
- 在 vs code 中使用 go 插件时相关工具的正确安装方式
前言 最近在学习 go 语言,当然编辑器用的还是最熟悉的 vs code 了. 虽然说 vs code 着实很占内存,但是没办法,谁让他配置起来方便快捷,并且对于前端程序员来说,着实是一大开发利器. ...
- 关于“System.Data.OleDb.OleDbException,外部数据库驱动程序 (1) 中的意外错误。”的解决方案
背景: 客户在导入格式为xls的excel文件,发生了错误(下面是我用程序重现的错误的信息). 未处理System.Data.OleDb.OleDbExceptionHResult=-21474672 ...
- php中常见的错误类型有,JavaScript编程中会出现的错误类型有哪些?错误类型介绍...
JavaScript编程中会出现的错误类型有哪些?本篇文章就给大家介绍在JavaScript编程中出现的几种常见的错误类型.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助.[相关视频教 ...
- ASP 中常见的错误 80004005 信息
ASP 中常见的错误 80004005 信息 错误信息 Microsoft JET Database Engine 错误 '80004005' 未指定的错误 (Provider 错误) 原因: 权限问 ...
- 微信二次修改微信号_微信号怎么改第二次?微信7.0.15版本改微信号方法解析
微信7.0.15版本是最近出来的一个版本,可以修改微信号,赢得了很多用户的关注,那么具体的修改方法是什么?下面就是对相关内容的介绍,感兴趣的话可以一起来了解下. 微信支持修改微信号操作流程 在7.0. ...
- linux进入vi永久显示行数,mac/linux中vim永久显示行号、开启语法高亮
步骤1: cp /usr/share/vim/vimrc ~/.vimrc 先复制一份vim配置模板到个人目录下 注:redhat 改成 cp /etc/vimrc ~/.vimrc 步骤2: vi ...
- 错误使用 load ASCII 文件的行号 1 中的文本未知“MATLAB“。
求助: 想打开一个.mat文件就一直出现这个:错误使用 load ASCII 文件的行号 1 中的文本未知"MATLAB 换了importdata也不行 救命
最新文章
- 正则表达式——全部符号解释(详解)
- jQueryHTMLCSS3实现垂直手风琴折叠菜单方法讲解
- Java并发编程-synchronized底层原理
- LabVIEW2020下载与安装教程
- 从零基础入门Tensorflow2.0 ----九、44.4 签名函数转换成savedmodel
- 网站自动跳转代码大合集
- Origin2018安装教程
- 利用BioEdit做多序列一致性比对
- rest_framework学习之序列化(Serializer)
- python入门系列(4) -- python常见应用
- Dojo1.11官方教程文档翻译(3.4)Dojo特效
- 将OKRA-ERP配置成固定资产实物管理全过程
- TemplateDoesNotExist错误之伤
- 获得root权限的命令 su和sudo命令
- vue中防止按钮重复点击提交的方法
- php 画布插入图像,PHP图片处理之图片背景、画布操作
- LPF与HPF是什么意思?
- l流程图平行四边形_关于写作那些事之快速上手Mermaid流程图
- 武汉大学计算机学院 推免,2012年武汉大学计算机学院推免研究生计分细则
- 黄斑裂孔易致失明,年长者和高度近视者尤其要注意!
热门文章
- [蓝桥杯][2017年第八届真题]包子凑数(解题报告)
- PHP 5.5.38 + mysql 5.0.11 + zabbix3.0 + nginx 安装
- 领域驱动设计(DDD:Domain-Driven Design)
- python 安装模块步骤
- maven项目下tomcat直接启动不了(LifecycleException)。报错如下截图
- 浏览器下载图片的方法,修改报文来实现。
- mknod创建设备(加载新的设备驱动时候,通常会用到此命令)
- 网易笔试题——计算机视觉_深度学习方向
- 人工智能工程师学习路线及具备的5项基本技能
- 基于谱减法的声音去噪