5

我是 PHP 新手,看到一些示例调用带有 @ 前缀的函数(如 @mysql_ping()),我感到很困惑。

它是干什么用的?谷歌搜索/搜索并没有太大帮助,因为 @ 被丢弃并且“别名”不是足够好的关键字。

4

7 回答 7

15

@ 抑制错误、警告和通知。

如果您使用自定义错误处理程序或适当检查 $php_errormsg 变量来补充它,那么您可以将其用于良好目的,以便您可以正确处理错误。

以我的经验,这种正确的用法很少见,而是以不好的方式大量使用,只是为了隐藏错误而不采取行动。

更多信息请访问http://www.php.net/manual/en/language.operators.errorcontrol.php

于 2008-09-26T07:36:29.083 回答
3

它抑制错误消息的输出。与这里的另一位评论员相反,我认为使用它是一种很好的编程习惯(特别是如果您正在开发一个 Web 应用程序,其中输出将混合在输出页面的 html 中)。

像 mysql_connect 这样的函数返回一个资源标识符,或者错误时返回 FALSE。使用 @mysql_connect(...) 并检查返回值。

于 2008-09-26T07:37:43.697 回答
2

谷歌搜索“php at symbol”表明它要求 PHP 不显示调用导致的任何错误消息。

于 2008-09-26T07:36:09.973 回答
1

它抑制了任何可能以其他方式输出的错误。

这是痛苦和困难的秘诀,因为当确实发生错误时,它不可避免地会导致困难,你一定要花费数小时来追查原因。如果没有使用 @ 操作符,那么几秒钟内就会发现错误。

没有充分的理由使用它,使用 display_errors 和 error_log ini 设置来防止错误显示在实时站点上,并让它们显示在您的开发站点上。

如果有一个你不想看到的错误,你最好只是修复它而不是抑制它!

如果它在外部库中并且超出您的控制范围,只需将其写入日志,在生产环境中关闭 display_errors 并使用它。因为不知道您现在正在压制并乐于忍受的错误是否总是从那里抛出的错误。

@ === 不好

于 2008-09-26T07:42:28.130 回答
0

抑制错误消息: http ://bytes.com/forum/thread10951.html

于 2008-09-26T07:37:15.087 回答
0

如果发生错误,使用 a 符号为函数添加前缀会阻止它触发 PHP 错误处理程序。请记住,如果您决定使用它,则必须自己完成所有错误处理。

$test = @file_get_contents('nonexistant.file');
if(!$test)
{
    die('Failed');
}

更好的做法是display_errors关闭并使用自定义错误处理程序(请参阅错误异常)。

于 2008-09-26T07:42:23.793 回答
0

有时它很有用——特别是如果管理员不希望您使用 php 环境或者该值不重要并且主要是装饰性的。不过,请记住;这是一种解决方法,而不是灵丹妙药。

[...]

.$foutDate = @filemtime($keyring); /* Don't care, as we've already established file */

$f["date"] = $foutDate;

$f["fullDate"] = date("r", $foutDate);

[...]

于 2010-05-06T04:05:42.037 回答