【问题标题】:PHP alias @ functionPHP别名@函数
【发布时间】:2010-09-13 09:10:19
【问题描述】:

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

它是干什么用的?谷歌搜索/搜索没有太大帮助,因为 @ 被丢弃并且“别名”不是足够好的关键字。

【问题讨论】:

    标签: php operators error-suppression


    【解决方案1】:

    @ 抑制错误、警告和通知。

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

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

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

    【讨论】:

    • 懒惰...假设它对于“运行一次,丢弃”脚本很有用。在任何情况下,这都是一种不好的做法。
    • 如果您有一个错误处理程序,那么抑制错误通知非常有用。
    • “它通常被不想检查错误代码的懒惰程序员使用” - 完全错误。 @ 正是 PHP 的“尝试/捕捉”方式php.net/manual/en/language.operators.errorcontrol.php
    • 非常非常远离真正的 try/catch。标准的“如果您知道自己在做什么并且有错误处理程序,那就没关系”免责声明。 叹息
    • @Havenard 不是 php 尝试捕获的方式。 PHP 使用...等待它...尝试/捕获 (php.net/manual/en/language.exceptions.php)。 @错误抑制就是这样,错误抑制。在某些情况下它可能很有用,但应谨慎使用。
    【解决方案2】:

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

    类似 mysql_connect 的函数返回一个资源标识符,或者错误时返回 FALSE。使用 @mysql_connect(...) 并检查返回值。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        这是痛苦和困难的秘诀,因为当确实发生错误时,它不可避免地会导致困难,因此您必须花费数小时追查原因。如果没有使用@运算符,那么几秒钟内就会发现错误。

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

        如果有你不想看到的错误,你最好只是修复它而不是隐藏它!

        如果它在外部库中且不受您的控制,只需将其写入日志,在生产环境中关闭 display_errors,然后继续使用。因为无法确定您现在正在压制并乐于忍受的错误是否总是从那里抛出的错误。

        @ === 不好

        【讨论】:

          【解决方案5】:

          【讨论】:

            【解决方案6】:

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

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

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

            【讨论】:

              【解决方案7】:

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

              [...]

              .$foutDate = @filemtime($keyring); /* Don't care, as we've already established file */
              
              $f["date"] = $foutDate;
              
              $f["fullDate"] = date("r", $foutDate);
              

              [...]

              【讨论】:

                猜你喜欢
                • 2021-06-25
                • 1970-01-01
                • 2010-12-13
                • 2011-01-11
                • 1970-01-01
                • 2018-08-19
                • 1970-01-01
                • 1970-01-01
                • 2021-12-12
                相关资源
                最近更新 更多