php抑制错误,PHP 行内错误抑制
显示行号
|
选择喜欢的代码风格
默认
GitHub
Dune
LakeSide
Plateau
Vibrant
Blue
Eighties
Tranquil
你可以让 PHP 利用错误控制操作符 @ 来抑制特定的错误。将这个操作符放置在表达式之前,其后的任何错误都不会出现。
看如下 PHP 代码:
echo @$foo['bar'];
如果 $foo['bar'] 存在,程序会将结果输出,如果变量 $foo 或是 'bar' 键值不存在,则会返回 null 并且不输出任何东西。如果不使用错误控制操作符,这个表达式会产生一个错误信息 PHP Notice: Undefined variable: foo 或 PHP Notice: Undefined index: bar 。
这看起来像是个好主意,不过也有一些讨厌的代价。PHP 处理使用 @ 的表达式比起不用时效率会低一些。过早的性能优化在所有程序语言中也许都是争论点,不过如果性能在你的应用程序 / 类库中占有重要地位,那么了解错误控制操作符的性能影响就比较重要。
其次,错误控制操作符会 完全 吃掉错误。不但没有显示,而且也不会记录在错误日志中。此外,在正式环境中 PHP 也没有办法关闭错误控制操作符。也许你认为那些错误时无害的,不过那些较具伤害性的错误同时也会被隐藏。
如果有方法可以避免错误抑制符,你应该考虑使用,举例来说,上面的程序代码可以这样重写:
echo isset($foo['bar']) ? $foo['bar'] : '';
当 fopen() 载入文件失败时,也许是一个使用错误抑制符的合理例子。你可以在尝试载入文件前检查是否存在,但是如果这个文件在检查后才被删除,而此时 fopen() 还未执行 (听起来有点不太可能,例子似乎比较极端,但是确实会发生),这时 fopen() 会返回 false 并且 抛出操作。这也许应该由 PHP 本身来解决,但这时一个错误抑制符才能有效解决的例子。
xdebug.scream = On
前面我们提到在正式的 PHP 环境中没有办法关闭错误控制操作符。但是 Xdebug 有一个 xdebug.scream 的 ini 配置项,可以关闭错误控制操作符。你可以按照下面的方式修改 php.ini。
ini_set('xdebug.scream', '1')
「Scream」这个 PHP 扩展提供了和 xDebug 类似的功能,只是 Scream 的 ini 设置项叫做 scream.enabled 。
当你在调试代码而错误信息被隐藏时,这是最有用的方法。请务必小心使用 scream ,而是把它当作暂时性的调试工具。有许多的 PHP 函数类库代码也许无法在错误抑制操作符停用时正常使用。
PHP 错误处理扩展阅读
发表评论
php抑制错误,PHP 行内错误抑制相关推荐
- python3命令需要使用命令行开发者工具_关于Python3的import问题(pycharm可以运行命令行import错误)...
以前从来没有写过特别多的代码,这次在阅读论文的时候跑别人的代码的时候出现了很多import的问题,这里我想跟大家分享一下,我在Ubuntu系统,使用的是anaconda3,版本为3.6,我一般会在py ...
- 控件必须放在具有 runat=server 的窗体标记内错误的解决方法
页面需要一个导出到Excel的功能,不想再次查询数据,想直接输出一个div的里面的内容,可以总报错,尝试了很多方法不行,总提示,一个隐藏控件必须放在具有 runat=server 的窗体标记内&quo ...
- 第 1 行出现错误: ORA-00604: 递归 SQL 级别 1 出现错误 ORA-38301: 无法对回收站中的对象执行 DDL/DML
第 1 行出现错误: ORA-00604: 递归 SQL 级别 1 出现错误 ORA-38301: 无法对回收站中的对象执行 DDL/DML 由于删除表空间时 出了点问题 最后一直没发删除表空间 先断 ...
- oracle 查看 编译错误,Oracle-已编译但有错误,命令行提交包不显示结果
开发环境名称 版本 操作系统 Windows 10 X64 Oracle win64_11gR2_database PLSQL Developer 11.0.4.1788(64 bit)01.1793 ...
- oracle第二行出现错误,Oracle临时表ORA-14552错误(二)
*第 1 行出现错误: ORA-14452: 试图创建, 更改或删除正在使用的临时表中的索引 唯一可以使用的方法是先truncate临时表,然后进行删除: SQL> truncate TABLE ...
- vue在IE11中报错js语法错误2行字符1
网上查了许久,总结解决方案如下: 可能与IE的某些插件冲突.请把所有无关的IE加载项全部禁用后尝试 引用了不存在的js文件 页面的某些文件在文档模型还没建立时就已经开始引用相关的节点 我最后是通过禁用 ...
- 行内块元素有哪些标签_html的行内元素与块级元素总结
希望大家补充一下常见的块级元素与行内元素~ 如有错误,请大家在评论区指出,一起进步! 一.区别 二.常见的块级元素: p:段落标签 div:把DIV看作是一容器,容器专门用来包含内容 h1.h2- - ...
- Dynamics 365新功能:可编辑的网格(行内编辑)
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复238或者20161127可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- html 中如何写js代码提示错误,javascript怎么进行错误处理?
在ES3之前js代码执行的过程中,一旦出现错误,整个js代码都会停止执行,这样就显的代码非常的不健壮.从ES3开始,js也提供了类似的错误处理机制,从而让js代码变的更健壮,及时执行的过程中出现了异常 ...
最新文章
- java 实现二叉树操作
- Python中最常用的字符串方法!
- fortran的bug:Fortran runtime error: Unit number in I/O statement too large
- linux中UDP程序流程、客户端、服务端
- 理解卷积神经网络的利器:9篇重要的深度学习论文(下)
- hiveserver2启动不起来_汽车一键启动只能用来打火吗 车主必须知道的几个“隐藏”技巧!...
- python语言哪个人创造_Python语言是由哪个人创造的?
- 循序渐进PostgreSQL: 学习pqxx C++ API访问
- 脱库数据分享论坛_22G疑为12306脱库文件大揭秘
- [QNX]calib_校准工具使用教程
- mysql拼音码自动生成_根据中文名,自动生成首字母的拼音码或拼音码(两种方法)...
- Kettle连接Hadoop clusters 报错
- php中ne,eq相等 ne、neq不相等, gt大于, lt小于
- 拼多多开店如何维护好粉丝?海昇智给你支招
- ORACLE-使用DBCA创建数据库
- 神经网络基础学习小记
- gpuimage123
- 网络变压器的工作原理:网络变压器中的直流电阻对POE供电有怎样的影响呢?
- 最新cydia安装包和依赖包
- pm2日志管理pm2-logrotate介绍
热门文章
- windows环境里React-Native运行失败的原因之一,安卓模拟器未启动
- 如何解决push commit conflict
- 使用postman消费Marketing Cloud的contact读取API
- 解决BDOC structure里header和data structure里数据格式不一致的问题
- 如何自动打开function对应的ABAP class
- 如何解决AET field创建失败后的一系列dump
- 2020各大网站rss订阅源地址_RSS订阅器inoreader一些使用心得
- 鸿蒙安卓数据互通吗,假如鸿蒙与安卓之间不能够实现游戏账号互通,你还会为其买单吗?...
- 绑定dictionary 给定关键字不再字典中_VBA数组与字典解决方案第51讲:字典嵌套及二级下拉菜单的制作...
- python内置函数用来返回_Python内置函数用法