显示行号

|

选择喜欢的代码风格

默认

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 行内错误抑制相关推荐

  1. python3命令需要使用命令行开发者工具_关于Python3的import问题(pycharm可以运行命令行import错误)...

    以前从来没有写过特别多的代码,这次在阅读论文的时候跑别人的代码的时候出现了很多import的问题,这里我想跟大家分享一下,我在Ubuntu系统,使用的是anaconda3,版本为3.6,我一般会在py ...

  2. 控件必须放在具有 runat=server 的窗体标记内错误的解决方法

    页面需要一个导出到Excel的功能,不想再次查询数据,想直接输出一个div的里面的内容,可以总报错,尝试了很多方法不行,总提示,一个隐藏控件必须放在具有 runat=server 的窗体标记内&quo ...

  3. 第 1 行出现错误: ORA-00604: 递归 SQL 级别 1 出现错误 ORA-38301: 无法对回收站中的对象执行 DDL/DML

    第 1 行出现错误: ORA-00604: 递归 SQL 级别 1 出现错误 ORA-38301: 无法对回收站中的对象执行 DDL/DML 由于删除表空间时 出了点问题 最后一直没发删除表空间 先断 ...

  4. oracle 查看 编译错误,Oracle-已编译但有错误,命令行提交包不显示结果

    开发环境名称 版本 操作系统 Windows 10 X64 Oracle win64_11gR2_database PLSQL Developer 11.0.4.1788(64 bit)01.1793 ...

  5. oracle第二行出现错误,Oracle临时表ORA-14552错误(二)

    *第 1 行出现错误: ORA-14452: 试图创建, 更改或删除正在使用的临时表中的索引 唯一可以使用的方法是先truncate临时表,然后进行删除: SQL> truncate TABLE ...

  6. vue在IE11中报错js语法错误2行字符1

    网上查了许久,总结解决方案如下: 可能与IE的某些插件冲突.请把所有无关的IE加载项全部禁用后尝试 引用了不存在的js文件 页面的某些文件在文档模型还没建立时就已经开始引用相关的节点 我最后是通过禁用 ...

  7. 行内块元素有哪些标签_html的行内元素与块级元素总结

    希望大家补充一下常见的块级元素与行内元素~ 如有错误,请大家在评论区指出,一起进步! 一.区别 二.常见的块级元素: p:段落标签 div:把DIV看作是一容器,容器专门用来包含内容 h1.h2- - ...

  8. Dynamics 365新功能:可编辑的网格(行内编辑)

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复238或者20161127可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  9. html 中如何写js代码提示错误,javascript怎么进行错误处理?

    在ES3之前js代码执行的过程中,一旦出现错误,整个js代码都会停止执行,这样就显的代码非常的不健壮.从ES3开始,js也提供了类似的错误处理机制,从而让js代码变的更健壮,及时执行的过程中出现了异常 ...

最新文章

  1. java 实现二叉树操作
  2. Python中最常用的字符串方法!
  3. fortran的bug:Fortran runtime error: Unit number in I/O statement too large
  4. linux中UDP程序流程、客户端、服务端
  5. 理解卷积神经网络的利器:9篇重要的深度学习论文(下)
  6. hiveserver2启动不起来_汽车一键启动只能用来打火吗 车主必须知道的几个“隐藏”技巧!...
  7. python语言哪个人创造_Python语言是由哪个人创造的?
  8. 循序渐进PostgreSQL: 学习pqxx C++ API访问
  9. 脱库数据分享论坛_22G疑为12306脱库文件大揭秘
  10. [QNX]calib_校准工具使用教程
  11. mysql拼音码自动生成_根据中文名,自动生成首字母的拼音码或拼音码(两种方法)...
  12. Kettle连接Hadoop clusters 报错
  13. php中ne,eq相等 ne、neq不相等, gt大于, lt小于
  14. 拼多多开店如何维护好粉丝?海昇智给你支招
  15. ORACLE-使用DBCA创建数据库
  16. 神经网络基础学习小记
  17. gpuimage123
  18. 网络变压器的工作原理:网络变压器中的直流电阻对POE供电有怎样的影响呢?
  19. 最新cydia安装包和依赖包
  20. pm2日志管理pm2-logrotate介绍

热门文章

  1. windows环境里React-Native运行失败的原因之一,安卓模拟器未启动
  2. 如何解决push commit conflict
  3. 使用postman消费Marketing Cloud的contact读取API
  4. 解决BDOC structure里header和data structure里数据格式不一致的问题
  5. 如何自动打开function对应的ABAP class
  6. 如何解决AET field创建失败后的一系列dump
  7. 2020各大网站rss订阅源地址_RSS订阅器inoreader一些使用心得
  8. 鸿蒙安卓数据互通吗,假如鸿蒙与安卓之间不能够实现游戏账号互通,你还会为其买单吗?...
  9. 绑定dictionary 给定关键字不再字典中_VBA数组与字典解决方案第51讲:字典嵌套及二级下拉菜单的制作...
  10. python内置函数用来返回_Python内置函数用法