PHP别名@函数
我是PHP的新手,我很困惑看到一些示例使用@前缀(如@mysql_ping())调用函数。
这是为了什么?谷歌搜索/搜索并没有多大帮助,因为@会被丢弃并且'alias'关键字不够好。
解决方案
谷歌搜索" php at symbol"表示它要求PHP不显示该调用导致的任何错误消息。
@禁止显示错误,警告和通知。
如果通过自定义错误处理程序或者对$ php_errormsg变量的适当检查来补充它,则可以将其用于良好的用途,以便正确处理错误。
以我的经验,这种正确用法很少见,反而以不良方式大量使用,只是隐藏错误而不对错误采取行动。
有关更多信息,请访问http://www.php.net/manual/zh/language.operators.errorcontrol.php
禁止显示错误消息:
http://bytes.com/forum/thread10951.html
它禁止输出错误消息。
与这里的另一个评论员相反,我认为使用它是一个很好的编程习惯(尤其是如果我们正在开发一个Web应用程序,其中输出将混合在输出页面的html中)。
像mysql_connect之类的函数返回资源标识符,或者在错误时返回FALSE。使用@mysql_connect(...)并检查返回值。
如果函数出现符号前缀,则将其停止会触发PHP错误处理程序。请记住,如果我们决定使用它,则必须自己处理所有错误。
$test = @file_get_contents('nonexistant.file'); if(!$test) { die('Failed'); }
更好的做法是关闭" display_errors"并使用自定义错误处理程序(请参见错误异常)。
它抑制了否则可能会输出的任何错误。
这是痛苦和艰辛的良方,因为一旦发生错误,不可避免地会导致困难,因此我们必须花费数小时来查找原因。如果未使用@运算符,则将在几秒钟内发现错误。
没有充分的理由使用它,使用display_errors和error_log ini设置可以防止错误在实时站点上显示,并将它们显示在开发站点上。
如果我们不想看到一个错误,那么最好只解决它而不是抑制它!
如果它在外部库中并且在控制之外,则只需将其写入日志,在生产环境中关闭display_errors并使用它。因为无法确定我们现在正在抑制的错误并乐意与之共处,所以错误永远都是从那里抛出的错误。
@ ===不好
有时候,这很有用,特别是如果管理员不希望我们使用php环境,或者该值不重要且主要是装饰性的。不过要记住;这是一种解决方法,而不是万能药。
[...]
.$foutDate = @filemtime($keyring); /* Don't care, as we've already established file */ $f["date"] = $foutDate; $f["fullDate"] = date("r", $foutDate);
[...]