在 $_POST 和 $_GET PHP 前面使用 @ 做什么?

5

我正在查看某人的代码,它有许多

@$_GET[];
@$_POST[];

@ 是什么作用?


它们抑制(可能有用的)错误。可能旨在消除未定义索引通知。 - Orangepill
请参考以下链接:http://us3.php.net/manual/zh/language.operators.errorcontrol.php - zedfoxus
这是一种不良的编程实践,因为它除了I/O操作等隐藏代码逻辑中的致命问题。 - davidkonrad
1个回答

13

@ 在 PHP 中可以压制任何错误,并使其后执行的任何内容静默失败(而不是输出错误字符串(假设 show_errors=true))。

有关更多信息,请参见错误控制运算符文档。


1
如果您需要在代码后面发送HTTP头响应,则这是必要的技巧。 - Teddy
1
我不会说这是必要的。但是,如果你正在编写可能会失败的代码(并且已经为失败情况做好了准备),但又不想让 PHP 按照自己的方式执行,可以使用这个前缀。(我经常在文件访问中看到它被使用,当你已经测试过一个句柄是否良好时,并且不需要 PHP 因 chmod 或其他错误而给你带来问题) - Brad Christie
@Teddy:你的评论是极其错误的。如果你收到“headers already sent”警告,这意味着你不可能再发送其他头信息。抑制警告并不能帮助你,因为在头信息已经完成后(一旦你发送非头信息输出,例如使用echo,头信息就会以空行终止——此后就不能再有任何头信息了),你仍然无法发送头信息。 - ThiefMaster
@ThiefMaster 放松,我只是试图提供一个可能的解释,为什么这段代码会有这么多 @ 行。这只是一条评论,不是答案。 - Teddy
我只是想澄清一下,这样人们就不会认为压制错误可以让本来无法运行的东西正常工作。 - ThiefMaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接