2009-10-23 74 views
1

可能重复任何问题:
Reference - What does this symbol mean in PHP?有没有使用“@”,而写代码

有没有使用任何问题,“@”,同时编写代码?它背后的机制是什么?

+0

在那部分代码中使用? – 2009-10-23 13:14:50

+4

在存储电子邮件地址的字符串中,它是完全有效的。使用它作为错误抑制器的 – 2009-10-23 13:20:02

+1

被认为是不好的编程!这是唯一可以说的。不要使用它!编写你的代码,以便你不需要它!错误是有目的的,对付他们,不要压制他们。 – markus 2009-10-24 19:44:45

回答

6

它抑制错误报告,所以我想这是调试困难;-)

+0

dang,打我吧。如果只有我没有去过PHP网站找到链接;-) – 2009-10-23 13:17:59

3

PHP中的@ operator是一个错误的控制操作。它可以抑制它之前的任何表达式的错误。

唯一明显的问题是,它使你的代码更难以调试。

编辑:由于评论员问...它实际上是在你想使用可能不存在的变量的情况下相当有用 - 如$ _GET或$ _POST变量。

if (isset($_GET['hello'] && $_GET['hello'] == "yes") {} // without @ 
if (@$_GET['hello'] == "yes") {} // with @ 

一些PHP函数也抛出错误以及返回false,所以在这些情况下,您可能要取消错误并检查返回值,而不是try和catch。

+0

为什么你会想要抑制某些错误?它实际上等同于'try {'...'} catch {}' - 带有一个空的catch-block - 这通常被认为是不可接受的,没有任何借口(如果你在'catch'中做某事,可能有一个借口,与一个空的块)。 – 2009-10-24 04:28:58

+1

被谁认为是不可接受的?有很多使用@操作符的完全有效的理由,我已经看到它们在许多开源项目中使用,包括Joomla和phpBB。查看我的更新,了解一个完全可以接受(并由我推荐)使用@操作符的示例。 – 2009-10-24 19:34:17

+0

@Pavel Minaev导致其PHP?一种语言与更多的初级高级开发人员感知。当人们做这样的事情时,我很喜欢,因为当我以4倍的市场价格进入合约来修复它时,它给了我工作保障。 – David 2009-10-24 19:51:37

5

WARNING:目前的“@”错误控制 运营商前缀甚至会禁用 错误严重错误 ,将终止脚本执行报告。 除其他事项外,这意味着如果 您使用“@”从 某些功能抑制的错误,要么是不 使用或已被错误地输入时, 脚本会没有任何迹象 ,为什么死在那里。

1

如果您使用触发错误的外部库,您可以放心忽略,这会很有用。简单的例子是,当它无法连接到外部服务触发一个错误,如果你可以推断出它未能根据从功能,您可以使用@操作符来抑制相对不需要错误返回值的库。

而编码,虽然,因为它使调试代码相当困难的,如果你有没有错误一起工作我从来没有使用它,只有使用它的代码,你知道的“作品”,但可以抛出奇错误你不感兴趣的

0

它不仅会抑制你可能需要了解的错误,但无论遇到任何错误,它会减慢你的代码。 @通过临时设置错误报告的php ini设置为0,然后回到先前的设置。

0

使用@在任何情况下是一个坏主意。评估一些变量几乎没有问题

$x = @ $somearray[$somethingelse]; # suppress E_NOTICE if array key is absent 

但在任何其他情况下,它是绝对可怕的。最糟糕的是调用与效应“@”功能 - 全功能和自己的子程序会再与错误报告禁用执行。如果其中的任何一个是抛出一个致命的例外,你不知道在哪里或什么。

PHP错误处理它可怕。但使用@更糟糕。

可悲的是,没有运营商只是压制一些(例如只是E_NOTICE和E_WARN)而不是其他运营商。

相关问题