我可以使用哈希符号 (#) 在 PHP 中注释吗?


Can I use a hash sign (#) for commenting in PHP?

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

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

2021 年更新:PHP 8 开始,这两个字符并不相同。序列#[用于属性。(感谢i336的评论(

原答案:

问题的答案是,在 PHP 中使用 "#" 和 "//" 进行单行注释有什么区别吗?是否定的

没有区别。通过查看 PHP 源代码的解析部分,"#"和"//"都由相同的代码处理,因此具有完全相同的行为。

PHP 的文档描述了注释的不同可能性。请参阅 http://www.php.net/manual/en/language.basic-syntax.comments.php

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

<?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

除了个人喜好之外,还有什么理由使用//而不是 # 进行评论吗?

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

<?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';
?>
有人

可能会认为#形式的注释主要用于使用熟悉的"shebang"(#!(表示法制作shell脚本。在下面的脚本中,PHP 应该忽略第一行,因为它也是一个注释。例:

#!/usr/bin/php
<?php
echo "Hello PHP'n";

如果您将其存储在可执行文件中,则可以从这样的终端运行它

./hello

输出为

Hello PHP

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

#!/usr/bin/php
#A
<?php
#B
echo "Hello PHP'n";

第一行(舍邦线(被口译员特别忽略。PHP 标记之前的注释行将回显到标准输出,因为它不在 PHP 标记内。打开 PHP 标记之后的注释被解释为 PHP 代码,但由于它是注释,因此会被忽略。

修订版的输出为

#A
Hello PHP

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

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

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

如果您在团队/项目中建立一些规则集...这两种类型的注释可用于概述注释代码的用途。

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

没有官方的PSR。

但是,在所有 PSR 示例代码中,它们都使用 // 进行内联注释。

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

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

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

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

在Windows键盘上,#键易于使用。在 mac 键盘 # 键上,大多数情况下不存在。

因此,对于 mac 用户来说,[Alt] + [3] 或 [⌥] + [3] 比//更难键入,因此//已成为一种显示带有注释的代码的跨平台方式。

这是我的观察。

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

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

然而,从

偏好的角度来看,你可能会争辩说,你更喜欢"shell->perl->php"注释一致性而不是"c->php"方式。

由于我确实将php视为穷人的webby perl,所以我使用#.。 然后我看到了别人的代码,直接来到了SO。;)

OP 问题:">除了个人喜好之外,还有什么理由使用//而不是 # 进行评论吗?">

一个 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

我引用了以下特定用法,人们可能会尝试,但这些都不起作用。事实上,这正是你如何DISable一个 #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

所有这些都说,">除了个人喜好之外,还有什么理由使用//而不是 # 进行评论吗?" 我同意此线程和另一个线程中的评论://更普遍地被认可和使用,这通常是使用该评论样式而不是#的一个很好的理由。

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

参考 - 无需扩展,在 1.62.3 中验证。另请参阅此处有关缩进的说明。

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