PHP别名@function

时间:2008-09-26 07:33:54

标签: php operators error-suppression

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

它是为了什么?谷歌搜索/搜索没有多大帮助,因为@被丢弃,'别名'不够好关键字。

7 个答案:

答案 0 :(得分:15)

@禁止错误,警告和通知。

如果您使用自定义error handler补充它或者对$ php_errormsg变量进行适当检查,则可以将其用于良好目的,以便您可以正确处理错误。

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

http://www.php.net/manual/en/language.operators.errorcontrol.php

的更多信息

答案 1 :(得分:3)

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

mysql_connect等函数返回资源标识符,错误返回FALSE。使用@mysql_connect(...)并检查返回值。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

它可以抑制可能输出的任何错误。

这是一种痛苦和困难的方法,因为当发生错误时,它不可避免地会导致困难,你必须花费数小时来追查原因。如果没有使用@运算符,则会在几秒钟内找到错误。

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

如果您不想看到错误,那么最好只修复它而不是抑制它!

如果它在外部库中并且在您的控件之外,只需将其写入日志,关闭生产中的display_errors,并使用它。因为无法判断你现在正在抑制的错误并且是否愿意接受这种错误将始终是从那里抛出的错误。

@ === BAD

答案 4 :(得分:0)

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:0)

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

[...]

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

$f["date"] = $foutDate;

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

[...]