PHP别名@函数

时间:2020-03-06 14:46:13  来源:igfitidea点击:

我是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);

[...]