编写代码时使用'@'有什么问题吗?它背后的机制是什么?
答案 0 :(得分:6)
它会抑制错误报告,所以我猜它会让调试小变得更难; - )
答案 1 :(得分:5)
WARNING:目前是“@”错误控制 运营商前缀甚至会禁用 错误报告严重错误 这将终止脚本执行。 除此之外,这意味着如果 你使用“@”来抑制a的错误 某些功能,或者不是 可用或有错误的, 脚本将死在那里没有 指示为什么。
答案 2 :(得分:3)
PHP中的@ operator是一个错误控制操作符。它会抑制它之前的任何表达式的错误。
唯一明显的问题是它使您的代码更难调试。
编辑:由于评论者问...在您想要使用可能不存在的变量(例如$ _GET或$ _POST变量)的情况下,它实际上非常有用。
if (isset($_GET['hello'] && $_GET['hello'] == "yes") {} // without @
if (@$_GET['hello'] == "yes") {} // with @
某些php函数也会抛出错误并返回false,因此在这些情况下,您可能希望抑制错误并检查返回值而不是try和catch。
答案 3 :(得分:1)
如果您使用的外部库触发了一个可以安全忽略的错误,那么它会非常有用。简单示例是一个库,当它无法连接到外部服务时触发错误,如果您可以根据函数的返回值推断它失败,您可以使用@运算符来抑制相对不需要的错误。
我从来没有在编码时使用它,因为如果你没有错误可以使调试代码相当困难,只在你知道“工作”的代码上使用它,但可以抛出你不感兴趣的奇怪错误英寸
答案 4 :(得分:0)
它不仅可以抑制您可能需要了解的错误,而且无论是否遇到任何错误,都会降低代码速度。 @的工作原理是将错误报告的php ini设置暂时设置为0,然后再回到之前的设置。
答案 5 :(得分:0)
在任何上下文中使用@都是个坏主意。评估一些变量
几乎可以$x = @ $somearray[$somethingelse]; # suppress E_NOTICE if array key is absent
但在任何其他情况下,这绝对是可怕的。最糟糕的是调用一个有效“@”的函数 - 然后在禁用错误报告的情况下执行整个函数及其自己的子程序。如果其中任何一个是抛出致命的例外,你就不会知道在哪里或什么。
PHP错误处理可怕。但使用@更糟糕。
可悲的是,没有运营商只能压制一些(例如只是E_NOTICE和E_WARN)而不是其他人。