我是PHP的新手,对于一些在函数前带有@前缀的例子感到困惑,例如 @mysql_ping()。
这是什么作用?通过谷歌搜索并不太有帮助,因为@符号会被忽略,而“别名”这个关键词也不够好。
我是PHP的新手,对于一些在函数前带有@前缀的例子感到困惑,例如 @mysql_ping()。
这是什么作用?通过谷歌搜索并不太有帮助,因为@符号会被忽略,而“别名”这个关键词也不够好。
@ 抑制错误、警告和注意事项。
如果您结合自定义错误处理程序或适当检查$php_errormsg变量,可以将其用于良好目的,以便正确处理错误。
就我个人经验而言,这种正确的用法并不常见,而是经常被用于不良的方式,仅仅是为了隐藏错误而不采取任何行动。
更多信息请参见http://www.php.net/manual/en/language.operators.errorcontrol.php
它可以抑制错误消息的输出。 与另一个评论者的观点相反,我认为在编写 Web 应用程序时使用它是很好的编程实践(特别是当输出将混合在输出页面的 HTML 中时)。
像 mysql_connect 这样的函数返回资源标识符或错误时返回 FALSE。请使用 @mysql_connect(...) 并检查返回值。
它会抑制任何可能产生的错误输出。
这是一种导致痛苦和困难的方法,因为一旦出现错误,你就不得不花费数小时追踪原因。如果没有使用 @ 运算符,那么错误将会在几秒钟内被找到。
没有什么好理由使用它,使用 display_errors 和 error_log ini 设置来防止在现场站点上显示错误,并让它们在开发站点上显示。
如果有一个你不想看见的错误,最好的办法是修复它而不是压制它!
如果是外部库中的问题而超出了你的控制范围,只需将其写入日志,在生产环境中关闭 display_errors,并接受它。因为无法预测你现在正在抑制并且愿意接受的错误总是从那里抛出的错误。
@ === 不好的
[...]
.$foutDate = @filemtime($keyring); /* Don't care, as we've already established file */
$f["date"] = $foutDate;
$f["fullDate"] = date("r", $foutDate);
[...]
在函数名前加上@符号可以阻止它触发PHP错误处理程序,但请注意如果出现错误,您必须自己处理所有的错误。
$test = @file_get_contents('nonexistant.file');
if(!$test)
{
die('Failed');
}
display_errors
并使用自定义错误处理程序(请参见错误异常)。