【问题标题】:Can I use a hash sign (#) for commenting in PHP?我可以使用井号 (#) 在 PHP 中进行评论吗?
【发布时间】:2012-02-24 00:03:34
【问题描述】:

我从未见过使用哈希 (#) 进行评论的 PHP 文件。但今天我意识到我真的可以!我假设每个人都使用// 是有原因的,所以我在这里。

除了个人喜好之外,是否有任何理由为 cmets 使用 // 而不是 #

【问题讨论】:

  • 这是一个井号(或磅或平方,取决于您所在的国家/地区),而不是井号标签。主题标签是对 Twitter 上的内容进行分类的一种方式。
  • 您可以使用 HTML 转义等效项 #如果您需要代码中的 # 符号
  • 我认为# 符号被称为哈希标签... :( 没有理由如此强烈地反对。经验教训
  • 我喜欢将# 用于单行cmets,// 用于注释代码,/* ... */ 用于注释块
  • PHP Comments # vs //的可能重复

标签: php comments


【解决方案1】:

2021 更新:从 PHP 8 开始,这两个字符不相同。序列#[used for Attributes。(感谢i336的评论)

原答案:

在 PHP 中对单行 cmets 使用“#”和“//”之间有 任何区别吗?否。

没有区别。通过查看 PHP 源代码的解析部分,both "#" and "//" are handled by the same code 具有完全相同的行为。

【讨论】:

  • 请注意,N++ (6.55) 不能总是正确折叠# cmets。我注意到在大型 PHP 文件中:2k 行或更多。有时它开始在多个 # 上折叠代码。
  • 我更喜欢# cmets 而不是// .. 但我一直想知道# 是否符合PSR .. 是吗?
  • 哈希在描述路线时很有帮助,例如。 # /news (code here) 而不是 // /news (code here)。至于2k LoC文件,我认为除了使用哪个注释标签之外还有其他问题:)
  • 自 PHP 8 起,不再是这种情况:# 将始终是注释运算符,但序列 #[ 现在标志着“attribute”的开始或注释。(这很酷。)这是一个非常小的更改(可以通过添加空格来解决,例如 # [),但意味着 # 不能再被视为“忽略所有行结束。”所以也许不要在自动生成的代码中使用#
  • 谢谢你,@i336_。我已更新答案以反映此更新。
【解决方案2】:

PHP 的文档描述了 cmets 的不同可能性。见http://www.php.net/manual/en/language.basic-syntax.comments.php

但它没有说明“//”和“#”之间的区别。所以不应该有技术差异。 PHP 使用 C 语法,所以我认为这就是大多数程序员使用 C 风格 cmets '//' 的原因。

【讨论】:

  • 或者它使用 perl 语法,在这种情况下“#”出现。 perl 从 unix-ey shell 中获取其注释语法。
【解决方案3】:
<?php
    echo 'This is a test'; // This is a one-line C++ style comment
    /* This is a multi-line comment.
       Yet another line of comment. */
    echo 'This is yet another test.';
    echo 'One Final Test'; # This is a one-line shell-style comment
?>

RTM

【讨论】:

  • //是C风格的注释
【解决方案4】:

除了个人喜好之外,是否有任何理由使用 // 而不是 # 用于 cmets?

我认为这只是个人喜好。 //# 之间没有区别。我个人使用# 进行单行注释,// 用于注释代码,/** */ 用于块注释。

<?php
    # This is a one-line comment
    echo 'This is a test';

    // echo 'This is yet another test'; // commenting code

    /** 
     * This is a block comment
     * with multi-lines 
     */
    echo 'One final test';
?>

【讨论】:

  • 我喜欢将// 用于常规代码cmets,因为这是大多数人在注释掉代码时使用的。我将# 用于旨在描述的cmets,而不是被注释掉的代码。当您尝试在该代码中包含 `/**/ 的代码上使用 /**/ 时,避免使用 /**/ 为一个衬垫减少打开/关闭冲突......您最终会过早关闭。这很糟糕。
【解决方案5】:

有人可能会认为# 形式的注释主要是为了使用熟悉的“shebang”(#!)符号制作一个 shell 脚本。在下面的脚本中,PHP 应该忽略第一行,因为它也是一个注释。示例:

#!/usr/bin/php
<?php

echo "Hello PHP\n";

如果你将它存储在一个可执行文件中,你可以像这样从终端运行它

./hello

输出是

Hello PHP

但是,这个推理是不正确的,如下反例所示:

#!/usr/bin/php
#A
<?php

#B
echo "Hello PHP\n";

解释器特别忽略了第一行(shebang 行)。 PHP 标记之前的注释行回显到标准输出,因为它不在 PHP 标记内。开始 PHP 标记之后的注释被解释为 PHP 代码,但它被忽略,因为它是一个注释。

修改后的输出是

#A
Hello PHP

【讨论】:

  • 其实shebang是 PHP代码之外的,所以绝对不是PHP的注释。尝试删除!,并通过php 命令行运行文件:它将打印“#/usr/bin/php”。忽略shebang的原因是因为PHP在文件的最开始就识别shebang行并忽略它们。
  • 使用php7.4,两个cmets都回显。因此,sheband 根本不会(或不再)被忽略。
  • @Chargnn,刚刚测试过,它也适用于 PHP 7.4。它不应该依赖于 PHP 版本,这个注释对 PHP 没有任何意义,只对 shell 有意义。 Shell 看到此注释,阅读它,然后将其删除并将其余部分传递给 PHP。也许您没有在 unix shell 或一些不支持此功能的奇怪 shell 中运行它?
【解决方案6】:

如果你在你的团队/项目中建立了一些规则集......这两种类型的 cmets 可以用来概括注释代码的用途。

例如,我喜欢使用# 来静音/禁用配置设置、子功能以及通常有用或重要但当前被禁用的一段代码。

【讨论】:

  • 我喜欢做相反的事情,但本质上是一样的。使用一个用于代码 cmets,另一个用于描述 cmets。
  • @ahnbizcad 最好使用注释块进行描述 /** * */
  • 为什么。 ----/-/-/-/--
【解决方案7】:

没有官方的 PSR。

但是,在所有 PSR 示例代码中,它们都将 // 用于内联 cmets。

有一个旨在将其标准化的 PSR-2 扩展提案,但不是官方的:https://github.com/php-fig-rectified/fig-rectified-standards/blob/master/PSR-2-R-coding-style-guide-additions.md#commenting-code

// 在 PHP 文化中更常用,但也可以使用 #。我个人喜欢它,因为它更短并节省字节。这是个人品味和偏见,没有正确答案,当然,直到它成为标准,这是我们应该尽可能遵循的标准。

【讨论】:

  • 计算机科学领域标准的问题在于,要制定标准,您必须有最好的选择,而在计算机科学中没有最好的选择。只有错误的选择,还有更好的选择。但“最佳选择”并不存在。
【解决方案8】:

是的,但是存在跨平台差异。

我在 PHP 中一直使用 # 进行评论,但我注意到采用差异。

在 Windows 键盘上,# 键很容易使用。 在 mac 键盘上,# 键大多不存在。

所以对于mac用户来说,[Alt] + [3] 或 [⌥] + [3] 比 // 更难打,所以 // 就成了用 cmets 显示代码的跨平台方式。

这是我的观察。

【讨论】:

    【解决方案9】:

    来自https://php.net/manual/en/migration53.deprecated.php

    “PHP 5.3.x 中已弃用的功能......以 '#' 开头的注释现在在 .INI 文件中已弃用。”

    你有它。默认情况下,哈希“#”似乎保留为注释选项,不会被弃用。我打算用它来区分嵌套的 if/else 语句的各个层并标记它们的右括号,或者用它来区分代码 cmets 和注释掉的代码,正如其他人在相关帖子中所建议的那样。 (注意:链接在 2019 年 4 月 23 日有效/有效,但谁知道在您阅读本文时它是否仍然有效。)

    【讨论】:

      【解决方案10】:

      除了个人喜好之外,还有什么理由使用 // 而不是 cmets 不是 #?

      我自己来这里是为了回答,很高兴知道有 NO 代码差异。

      但是,偏好方面的人可能会争辩说,您更喜欢 'shell->perl->php' 注释一致性而不是 'c->php' 方式。

      由于我确实将 php 作为一个穷人的 webby perl 来处理,所以我使用 #.. 然后我看到了别人的代码并直接进入 SO。 ;)

      【讨论】:

        【解决方案11】:

        OP 问题:“除了个人喜好之外,是否有任何理由使用 // 而不是 # 用于 cmets?

        一个 2021 年的答案,这肯定不是我们在此线程中看到的唯一答案:

        如果您使用 Visual Studio Code 并使用区域来阻止代码,则必须使用 # 而不是 // 来定义区域。对于这个问题,不,即使对于这个用例:如果您要注释掉一个区域,您可以使用#///** */,您用于此的技术是个人的偏好。

        VSCode 中的块定义示例:

        #region this is a major block
        /** DocBlock */
        function one() {}
        /** DocBlock */
        function two() {
          #region nested region based on indentation
          // comments and code in here
              # another nested region based on indentation
                // foo
              #endregion
          #endregion
        }
        #endregion
        

        关于内块的折叠:

        #region this is a major block
        /** DocBlock */
        function one() {}
        /** DocBlock */
        function two() {
        >  #region nested region based on indentation
        }
        #endregion
        

        关于外块的折叠:

        > #region this is a major block
        

        我引用了以下具体用法,人们可能会尝试尝试,但这些都行不通。事实上,这正是您禁用#region 块的方式:

        // #region
        // #endregion
        /** #region */
        /** #endregion */
        

        关于在 VSCode 中注释掉一个区域:

        /** You can now collapse this block
        #region Test1
        // foo
        #endregion
        // everything through to here is collapsed
        */
        
        // #region Test1
        // folding is disabled here
        // #endregion
        
        # #region Test1
        // this also disables the fold
        # #endregion
        

        所有这些都说,“除了个人喜好之外,还有什么理由使用 // 而不是 # 来表示 cmets?” 我同意这个线程和 other thread 中的 cmets :// 更普遍地被识别和使用,这通常是使用这种评论风格而不是 # 的好理由。

        最后注意,基于缩进的嵌套要小心,因为代码格式化会删除您的手动缩进,从而破坏您基于 cmets 的嵌套块方案。我已经用#// 对此进行了测试(顺便说一句,// 也嵌套在缩进上。同样,在 OP 问题的上下文中,不,没有理由使用// 而不是#用于当前 VSCode 中此上下文中的嵌套缩进,因为两者的工作方式完全相同。但是,这是使用 # 而不是 // 的用例。

        Ref - 无需扩展,已在 1.62.3 中验证。也可以查看关于缩进的注释。

        【讨论】:

          【解决方案12】:

          带有“#”的注释在 PHP 5.3 中被弃用。所以总是使用 // 或 /.../

          【讨论】:

          • 它们仅在INI 文件中被弃用。
          • @DisgruntledGoat 官方文档有参考吗?
          • Straight from php.net: 现在 .INI 文件中不推荐使用以“#”开头的注释。
          • 安德烈,也许是时候删除这个答案了。
          • 少研究!让你迷失 :) 但这也帮助我知道 # 在 INI 文件中已弃用
          猜你喜欢
          • 2016-08-05
          • 1970-01-01
          • 2014-09-05
          • 1970-01-01
          • 1970-01-01
          • 2021-07-22
          • 1970-01-01
          • 1970-01-01
          • 2014-03-21
          相关资源
          最近更新 更多