注释

PHP 支持 'C'、'C++' 和 Unix shell 风格(Perl 风格)注释。例如

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

"单行" 注释样式仅注释到行尾或当前 PHP 代码块的结束位置,以先到者为准。这意味着 // ... ?># ... ?> 之后的 HTML 代码将被打印:?> 将退出 PHP 模式并返回 HTML 模式,而 //# 无法影响它。

<h1>这是一个 <?php # echo 'simple';?> 示例</h1>
<p>上面的标题将显示 '这是一个示例'。</p>

'C' 风格注释以遇到的第一个 */ 结束。请确保不要嵌套 'C' 风格注释。如果你试图注释掉一大块代码,很容易犯这个错误。

<?php
/*
echo 'This is a test'; /* This comment will cause a problem */
*/
?>

添加说明

用户贡献说明 11 条说明

442
J. Prettyman
10 年前
说明可以有各种形状和大小。它们各不相同,它们的使用完全取决于编写代码的人。但是,我尝试在我的代码中保持一致,这样下一位阅读者可以轻松地理解。所以类似这样的东西可能会有所帮助...

<?php

//======================================================================
// 类别 大字体
//======================================================================

//-----------------------------------------------------
// 子类别 小字体
//-----------------------------------------------------

/* 标题在此,注意首字母大写 */

# 选项 1
# 选项 2
# 选项 3

/*
* 这是一个详细的解释
* 关于某些需要
* 多段信息的内容。
*/

// 这是一个单行引用。
?>
317
M Spreij
19 年前
一种很好的方法是通过混合两种注释风格来切换代码块的注释
<?php
//*
if ($foo) {
echo
$bar;
}
// */
sort($morecode);
?>

现在,通过从第一行中删除一个 /..

<?php
/*
if ($foo) {
echo $bar;
}
// */
sort($morecode);
?>
..代码块突然被注释掉了。
这是因为 /* .. */ 覆盖了 //。你甚至可以 "翻转" 两个代码块,像这样
<?php
//*
if ($foo) {
echo
$bar;
}
/*/
if ($bar) {
echo $foo;
}
// */
?>
vs
<?php
/*
if ($foo) {
echo $bar;
}
/*/
if ($bar) {
echo
$foo;
}
// */
?>
34
aetonsi
1 年前
从 php 8 开始,以 "#[" 开头的单行注释具有特殊含义:它们被视为 "属性",并且必须遵守预期的语法。请参阅:https://php.net/manual/en/language.attributes.php

因此,以下代码在 php 8+ 中会抛出错误,而在 php <8 中则完全有效
<?php
#[~~my super cool comment~~~]
?>

为了安全起见,请始终使用 "//" 注释而不是 "#"。也许将来 "#" 注释会有其他特殊含义,谁知道呢。
139
magnesium dot oxide dot play+php at gmail dot com
10 年前
值得一提的是,HTML 注释在 PHP 解析器中没有意义。所以,

<!-- 注释
<?php echo some_function(); ?>
-->

将执行 some_function() 并将结果回显到 HTML 注释中。
60
hcderaad at wanadoo dot nl
19 年前
PHP 中的注释可用于多种目的,其中一个很有趣的用途是,你可以使用 PHPDocumentor (http://www.phpdoc.org/) 直接从注释中生成 API 文档。

因此,必须使用类似 JavaDoc 的注释语法(符合 DocBook DTD),例如
<?php
/**
* 此处的第二个 * 将打开 DocBook 注释块,它可能在你的开发周期中<br>
* 节省你大量时间,避免你不得不重新编写<br>
* 主要文档部分以生成一些可用的文档形式。
*/
?>
一些基本的类似 html 的格式在其中得到支持(例如 <br> 标记)以创建某种布局。
51
J Lee
18 年前
MSpreij (2005-05-08) 说 /* .. */ 覆盖 //
匿名 (2006-01-26) 说 // 覆盖 /* .. */

实际上,两者都正确。一旦注释打开,*所有内容* 都会被忽略,直到注释结束(或 PHP 代码块结束)为止。

因此,如果使用
// 打开注释,则 /* 和 */ 将被 "覆盖",直到换行符之后
/* 打开注释,则 // 将被 "覆盖",直到 */ 之后
50
Steve
19 年前
在注释掉正则表达式时要小心。

例如,以下代码会导致解析错误。

我更喜欢使用 # 作为正则表达式定界符,这样就不会影响我 ;-)

<?php

/*

$f->setPattern('/^\d.*/
');

*/

?>
26
theblazingangel at aol dot com
16 年前
可能有些人没有注意到,以下代码会导致解析错误!//?> 中的 ?> 不会被视为注释文本,这是因为需要处理像 <?php echo 'something'; //comment ?>
这样的单行代码。
<?php
if(1==1)
{
//?>
}
?>

我在注释掉包含正则表达式的代码行时发现了这种 "异常",该正则表达式本身包含 ?>,使用 // 样式注释。
例如,//preg_match('/^(?>c|b)at$/', 'cat', $matches);
在注释掉的情况下会导致错误!使用 /**/ 样式注释可以解决此问题。我不了解 # 样式注释,我自己从来不使用它们。
18
jballard at natoga dot com
13 年前
注释不会占用处理能力。

所以,对于所有认为注释因为占用处理能力而不需要的人来说,现在他们没有理由再发表评论了;)

<?php

// 控制
echo microtime(), "<br />"; // 0.25163600 1292450508
echo microtime(), "<br />"; // 0.25186000 1292450508

// 测试
echo microtime(), "<br />"; // 0.25189700 1292450508
# TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
# .. 上面注释重复了 18809 次 ..
echo microtime(), "<br />"; // 0.25192100 1292450508

?>

它们占用的时间差不多(大约是指在重复测试中,有时控制和测试之间的差异是负数,有时是正数)。
14
Wolfsbay at ya dot ru
14 年前
如果您使用的是带有代码高亮的编辑器,那么更容易注意到像 /* */ */ 这样的错误。
5
fun at nybbles dot com
18 年前
我在所有语言中使用的一个技巧,可以暂时屏蔽掉大块代码(通常用于测试/调试/新功能目的),是在顶部设置(或定义)一个变量,并使用它有条件地注释代码块;与 if(0)(Samuli 在 2005 年 11 月的评论)相比,它额外的好处是,您可以同时运行多个版本或测试,并且如果要保留代码块,则不需要以后清理:只需重置变量即可。

我个人更喜欢使用这种方法来有条件地包含用于新功能测试的代码,而不是屏蔽掉它,但这取决于个人喜好:)

这也是我所知的唯一一种安全方法,可以轻松地在任何语言中嵌套注释,并且对于多文件使用非常有用,如果条件变量放置在包含文件中:)

例如,放在文件顶部

<?php $ver3 = TRUE;
$debug2 = FALSE;
?>

然后在文件内部

<?php if ($ver3) {
print(
"此代码已包含,因为我们正在测试版本 3");
}
?>

<?php if ($debug2) {
print(
"此代码已被 '注释' 掉");
}
?>
To Top