2024 年 PHP 日本会议

注释

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

<?php
echo '这是一个测试'; // 这是一个单行 C++ 风格注释
/* 这是一个多行注释
这是另一行注释 */
echo '这是另一个测试';
echo
'最终测试'; # 这是一个单行 shell 风格注释
?>

"单行"注释风格只注释到行尾或当前 PHP 代码块的结尾,以先到者为准。这意味着 // ... ?># ... ?> 后面的 HTML 代码将会被打印:?> 会退出 PHP 模式并返回 HTML 模式,而 //# 无法影响这一点。

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

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

<?php
/*
echo '这是一个测试'; /* 此注释将导致问题 */
*/
?>

添加笔记

用户贡献笔记 11 条笔记

J. Prettyman
10 年前
笔记可以有各种形状和大小。它们各不相同,其用途完全取决于编写代码的人。但是,我尝试在我的代码中保持一致性,以便其他人更容易阅读。因此,像这样的东西可能会有所帮助……

<?php

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

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

/* 标题 注意首字母大写 */

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

/*
* 这是一个详细的解释
* 需要几段信息的内容。
*/

// 这是一个单行引用。
?>
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;
}
// */
?>
对比
<?php
/*
if ($foo) {
echo $bar;
}
/*/
if ($bar) {
echo
$foo;
}
// */
?>
aetonsi
1 年前
从 php 8 开始,以 "#[" 开头的单行注释具有特殊含义:它们被视为“属性”,并且必须遵守预期的语法。参见:https://php.net/manual/en/language.attributes.php

因此,以下代码在 php 8+ 中会抛出错误,而在 php <8 中则完全有效
<?php
#[~~我的超级酷注释~~~]
?>

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

<!-- comment
<?php echo some_function(); ?>
-->

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

因此,必须使用类似 JavaDoc 的注释语法(符合 DocBook DTD),示例
<?php
/**
* 此处的第二个 * 打开 DocBook 注释块,这可能会在您以后的开发周期中* 节省大量时间,避免您不得不重写* 主要文档部分以生成某种可用的文档形式。
*/
?>
此方法支持一些基本的类似 HTML 的格式(即 <br> 标记)来创建某种布局。
J Lee
18 年前
MSpreij (2005 年 5 月 8 日) 说 /* .. */ 覆盖 //
匿名用户 (2006 年 1 月 26 日) 说 // 覆盖 /* .. */

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

因此,如果用以下方式打开注释:
// 那么 /* 和 */ 将被“覆盖”,直到换行符之后
/* 那么 // 将被“覆盖”,直到 */ 之后
Steve
19 年前
注释正则表达式时要小心。

例如,以下内容会导致解析器错误。

无论如何,我更喜欢使用 # 作为正则表达式分隔符,这样就不会影响我 ;-)

<?php

/*

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

*/

?>
theblazingangel at aol dot com
17 年前
对一些人来说可能并不明显,但以下代码会引起解析错误!//?> 中的 ?> 不被视为注释文本,这是因为必须处理一行上的代码,例如 <?php echo 'something'; //comment ?>

<?php
if(1==1)
{
//?>
}
?>

当我用 // 风格注释注释掉包含正则表达式的代码行时,我发现了这个“异常”。
例如,//preg_match('/^(?>c|b)at$/', 'cat', $matches);
在注释时会导致错误!使用 /**/ 风格注释可以解决这个问题。我不了解 # 风格注释,我个人从不使用它们。
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

?>

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

我个人更倾向于使用这种方法有条件地包含新功能测试的代码,而不是将其屏蔽……但嘿,各有所好 :)

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

例如,放在文件顶部

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

然后在文件的更深处

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

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