Gerry..

117

注意:首先,我意识到99%的PHP开发人员使用错误抑制操作符(我曾经是其中之一),所以我期待任何看到这个的PHP开发人员不同意.

在您看来,使用@运算符来抑制PHP中的错误/警告是否有效,而您可能正在处理错误?

简答:

不!

更正确的回答:

我不知道,因为我不知道一切,但到目前为止,我没有遇到过这是一个很好的解决方案的情况.

为什么它是坏的:

在我认为使用PHP大约7年的时候,我已经看到由错误抑制运算符引起的无休止的调试痛苦,并且从未遇到过无法避免的情况.

问题是,您正在抑制错误的代码段目前可能只会导致您看到的错误; 但是,当您更改受抑制的行所依赖的代码或其运行的环境时,该行有可能尝试从您尝试忽略的错误中输出完全不同的错误.那么如何追踪未输出的错误?欢迎调试地狱!

我花了很多年才意识到由于错误被压制,我每隔几个月浪费了多少时间.最经常(但不是唯一)这是在安装第三方脚本/应用程序/库之后,在开发人员环境中没有错误,但不是我的,因为php或服务器配置差异或缺少依赖性,这通常会立即输出错误提醒问题是什么,但不是当开发者添加魔法@时.

替代方案(取决于情况和期望的结果):

处理您知道的实际错误,以便如果一段代码将导致某个错误,那么它不会在该特定情况下运行.但我认为你得到了这个部分而你只是担心最终用户会看到错误,这就是我现在要解决的问题.

对于常规错误,您可以设置错误处理程序,以便在查看页面时以您希望的方式输出错误处理程序,但是对最终用户隐藏并记录这些错误处理程序,以便您知道用户触发的错误.

对于display_errors在php.ini中设置为关闭的致命错误(您的错误处理程序仍会被触发)并启用错误记录.如果你有一个开发服务器和一个实时服务器(我推荐),那么在开发服务器上不需要这一步,因此你仍然可以调试这些致命错误,而不必诉诸于查看错误日志文件.甚至还有一个技巧,使用shutdown函数向错误处理程序发送大量致命错误.

总结:

请避免它.可能有一个很好的理由,但我还没有看到一个,所以直到那天我认为(@)错误抑制操作符是邪恶的.

这绝对是正确的.抑制错误是一个根本性的错误.使用您的错误处理程序,或使用异常,不要隐藏错误. (21认同)

`-1`鹦鹉讽刺"是邪恶的"模因.避免使用内置语言功能而明确无视实际用例是货物崇拜编程的主要定义. - 特别是这种咆哮没有提到抑制错误实际上并没有消失.自定义错误处理程序仍然可以恢复它们(`set_error_handler("var_dump");`是scream扩展的惰性等价物).此外,这种过于宽泛的建议导致了普通的`isset()`通知抑制语法解决方法,这实际上可以阻碍调试(因为调试通知随后被无可挽回地抑制). (12认同)

@mario"明确无视实际用例"......嗯......也许你没有读过"邪恶"的全文."可能有一个很好的理由,但我还没有看到一个,所以直到那天我认为(@)错误抑制操作符是邪恶的".我说我还没有找到这样的背景.看起来你对Op提出的问题有了答案,也许你可以考虑提交一个有更多空间来讨论你的观点的答案. (4认同)

在检查索引值之前,您的代码不会检查索引是否存在.这将导致难以追踪问题,例如表单元素是重命名还是错误输入.不存在的索引意味着与表单元素不同的东西留空.此外,您不应该向最终用户显示错误.如果你只是在开发中遇到HTML/JSON问题,并认为留下它们没问题,这就是我们不同意的地方.典型执行路径上的通知通常表示无法处理您应该处理的条件. (3认同)

php检查运算是否错误,用PHP中的@运算符抑制错误相关推荐

  1. php 错误 异常,php中的异常和错误解析

    PHP错误是属于php程序自身的问题,一般是由非法的语法,环境问题导致的,使得编译器无法通过检查甚至无法运行的情况.PHP异常一般是业务逻辑上出现的不合预期.与正常流程不同的状况,不是语法错误.本文介 ...

  2. go http 处理w.write 错误_Go语言中的异常和错误处理简介

    女主宣言 异常和错误处理在保证程序的鲁棒性方面起到了至关重要的作用.C++.Java.Python中的异常和错误处理都是比较类似的,可以用try-catch逻辑操作,但是Go中的异常处理却有别于以上三 ...

  3. 哪个选项对python文件操作的描述是错误的_Python 中对变量描述错误的选项是

    [单选题]以下程序的输出结果是: for i in "Summer": if i == "m": break print(i) [单选题]下面代码的输出结果是: ...

  4. python中运算符号怎样表示_Python中的运算符与表达式

    你所编写的大多数语句(逻辑行)都包含了表达式(Expressions).一个表达式的简单例子便是 2+3.表达式可以拆分成运算符(Operators)与操作数(Operands). 运算符(Opera ...

  5. mysql中的删除语法错误_mysql – EXPLAIN中的SQL语法错误

    我试图让一个解释命令在 mysql中工作.我正在尝试解决此删除查询的性能问题: DELETE FROM boost_cache_relationships WHERE base_dir = 'cach ...

  6. matlab错误打印,MATLAB中数据输出格式出现错误?

    close all clear all fidin=fopen('20131118B.txt');                 %打开文件one minute fidout=fopen('data ...

  7. java 错误输出_Java中的字数统计错误输出

    我是Java新手. 我编写了一个代码来计算文件中特定单词的出现次数.要向用户询问要计算的单词.我写了两个代码.第一个代码运行正常,计数正确.而在第二个代码中,计数较少.我无法弄清楚原因.有人可以帮我找 ...

  8. python 幂运算 整数_在Python中检查一个数字是否是另一个数字的幂

    python 幂运算 整数 To solve this problem simply, we will use the log() function from the math module. The ...

  9. matlab solve函数错误【检查对函数 ‘solve‘ 的调用中是否缺失参数或参数数据类型不正确】

    <MATLAB智能算法30个案例分析>书中给出了这样一个语句: %% 计算迭代的次数Time Time=ceil(double(solve(['1000*(0.9)^x=',num2str ...

最新文章

  1. 201621123075作业12-流与文件
  2. html点击屏幕向右移动,HTML – 一旦打开,如何使移动页面适合屏幕?
  3. webview300毫秒点击问题
  4. c++语言成绩统计系统数组,急求!!!关于学生成绩管理系统的C++ 结构体数组...
  5. 云计算学习总结(2)——服务器场景漏洞修复
  6. c语言禁忌搜索算法源代码,禁忌搜索算法CC++源代码.pdf
  7. 异步IO框架实现之完成端口(Completion Port)
  8. ppt加载html5,当PPT遇见H5,这才是真爱!
  9. Android开发工程师文集-提示框,菜单,数据存储,组件篇
  10. 19清明假前一周安排
  11. C#中包含英文月份的美式日期输出格式
  12. 查看wifi连接路由器的MAC地址
  13. 感谢读者朋友和网友对《Spring Boot实战派》的批评指正
  14. SpringMVC @GetMapping注解路径冲突问题
  15. Eclipse解决SVN版本冲突
  16. 一个疑难故障,坑了我半年青春-----知识就是生产力
  17. 表述为oracle进程有哪些 作用是什么,Oracle的系统进程和主要作用简介
  18. 星志远电商:拼多多头像如何保存?
  19. Servlet生命周期及请求、响应
  20. 深圳大学计算机考研资料汇总

热门文章

  1. mongodb python 大于_5、Python操作MongoDB
  2. 标星7000+,这个 Python 艺术二维码生成器厉害了!
  3. 微信公众平台如何获得openid
  4. Android中文语音合成(TTS)各家引擎对比 .
  5. 傅里叶变换的意义 .
  6. .NET开发 程序员必备工具 -- Regulator:生成正则表达式工具
  7. 每天进步一点点《ML - 高斯混合模型》
  8. 漫步微积分二十六——Sigma符号和一些特殊和
  9. [机器学习]正则化项L1和L2的学习与理解
  10. [深度学习-总结]Deep learning中8大模型介绍与比较(LeNet5,AlexNet,VGG,Inception,MobileNets,ResNet,DenseNet,Senet)