PHP别名@函数

5

我是PHP的新手,对于一些在函数前带有@前缀的例子感到困惑,例如 @mysql_ping()。

这是什么作用?通过谷歌搜索并不太有帮助,因为@符号会被忽略,而“别名”这个关键词也不够好。

7个回答

15

@ 抑制错误、警告和注意事项。

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

就我个人经验而言,这种正确的用法并不常见,而是经常被用于不良的方式,仅仅是为了隐藏错误而不采取任何行动。

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


嗯,懒惰的话...可以说它对于“运行一次,丢弃”的脚本是有用的。但无论如何,这都是一种不好的做法。 - Bite code
2
如果你已经有一个错误处理程序,那么抑制错误通知会非常有用。 - eyelidlessness
“这完全是错误的。@符号正是PHP中实现“try/catch”的方式。” - Havenard
1
非常非常远离真正的try/catch。标准的“如果你知道你在做什么并且有错误处理程序,那么就没问题”的免责声明。叹气 - Vinko Vrsalovic
1
@Havenard,这不是 PHP 的 try catch 用法。PHP 使用……等等……try / catch(http://php.net/manual/en/language.exceptions.php)。@ 错误抑制只是错误抑制。在某些情况下它可能很有用,但应谨慎使用。 - Josiah

3

它可以抑制错误消息的输出。 与另一个评论者的观点相反,我认为在编写 Web 应用程序时使用它是很好的编程实践(特别是当输出将混合在输出页面的 HTML 中时)。

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


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

1

它会抑制任何可能产生的错误输出。

这是一种导致痛苦和困难的方法,因为一旦出现错误,你就不得不花费数小时追踪原因。如果没有使用 @ 运算符,那么错误将会在几秒钟内被找到。

没有什么好理由使用它,使用 display_errors 和 error_log ini 设置来防止在现场站点上显示错误,并让它们在开发站点上显示。

如果有一个你不想看见的错误,最好的办法是修复它而不是压制它!

如果是外部库中的问题而超出了你的控制范围,只需将其写入日志,在生产环境中关闭 display_errors,并接受它。因为无法预测你现在正在抑制并且愿意接受的错误总是从那里抛出的错误。

@ === 不好的



0
有时候这很有用——特别是当管理员不希望你玩弄php环境或者该值并不重要,只是为了美观。但请记住,这只是一个解决方法,而不是万能药。

[...]

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

$f["date"] = $foutDate;

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

[...]


0

在函数名前加上@符号可以阻止它触发PHP错误处理程序,但请注意如果出现错误,您必须自己处理所有的错误。

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

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

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