可能重复任何问题:
Reference - What does this symbol mean in PHP?有没有使用“@”,而写代码
有没有使用任何问题,“@”,同时编写代码?它背后的机制是什么?
可能重复任何问题:
Reference - What does this symbol mean in PHP?有没有使用“@”,而写代码
有没有使用任何问题,“@”,同时编写代码?它背后的机制是什么?
它抑制错误报告,所以我想这是调试小困难;-)
dang,打我吧。如果只有我没有去过PHP网站找到链接;-) – 2009-10-23 13:17:59
PHP中的@ operator是一个错误的控制操作。它可以抑制它之前的任何表达式的错误。
唯一明显的问题是,它使你的代码更难以调试。
编辑:由于评论员问...它实际上是在你想使用可能不存在的变量的情况下相当有用 - 如$ _GET或$ _POST变量。
if (isset($_GET['hello'] && $_GET['hello'] == "yes") {} // without @
if (@$_GET['hello'] == "yes") {} // with @
一些PHP函数也抛出错误以及返回false,所以在这些情况下,您可能要取消错误并检查返回值,而不是try和catch。
为什么你会想要抑制某些错误?它实际上等同于'try {'...'} catch {}' - 带有一个空的catch-block - 这通常被认为是不可接受的,没有任何借口(如果你在'catch'中做某事,可能有一个借口,与一个空的块)。 – 2009-10-24 04:28:58
被谁认为是不可接受的?有很多使用@操作符的完全有效的理由,我已经看到它们在许多开源项目中使用,包括Joomla和phpBB。查看我的更新,了解一个完全可以接受(并由我推荐)使用@操作符的示例。 – 2009-10-24 19:34:17
@Pavel Minaev导致其PHP?一种语言与更多的初级高级开发人员感知。当人们做这样的事情时,我很喜欢,因为当我以4倍的市场价格进入合约来修复它时,它给了我工作保障。 – David 2009-10-24 19:51:37
WARNING:目前的“@”错误控制 运营商前缀甚至会禁用 错误严重错误 ,将终止脚本执行报告。 除其他事项外,这意味着如果 您使用“@”从 某些功能抑制的错误,要么是不 使用或已被错误地输入时, 脚本会没有任何迹象 ,为什么死在那里。
如果您使用触发错误的外部库,您可以放心忽略,这会很有用。简单的例子是,当它无法连接到外部服务触发一个错误,如果你可以推断出它未能根据从功能,您可以使用@操作符来抑制相对不需要错误返回值的库。
而编码,虽然,因为它使调试代码相当困难的,如果你有没有错误一起工作我从来没有使用它,只有使用它的代码,你知道的“作品”,但可以抛出奇错误你不感兴趣的
它不仅会抑制你可能需要了解的错误,但无论遇到任何错误,它会减慢你的代码。 @通过临时设置错误报告的php ini设置为0,然后回到先前的设置。
使用@在任何情况下是一个坏主意。评估一些变量几乎没有问题
$x = @ $somearray[$somethingelse]; # suppress E_NOTICE if array key is absent
但在任何其他情况下,它是绝对可怕的。最糟糕的是调用与效应“@”功能 - 全功能和自己的子程序会再与错误报告禁用执行。如果其中的任何一个是抛出一个致命的例外,你不知道在哪里或什么。
PHP错误处理它可怕。但使用@更糟糕。
可悲的是,没有运营商只是压制一些(例如只是E_NOTICE和E_WARN)而不是其他运营商。
在那部分代码中使用? – 2009-10-23 13:14:50
在存储电子邮件地址的字符串中,它是完全有效的。使用它作为错误抑制器的 – 2009-10-23 13:20:02
被认为是不好的编程!这是唯一可以说的。不要使用它!编写你的代码,以便你不需要它!错误是有目的的,对付他们,不要压制他们。 – markus 2009-10-24 19:44:45