5

我有一个包含 PHP 的 HTML 代码,我想把它全部注释掉。

<input type="hidden" name="returnurl" value="<?php if (!empty($link)) {echo $link;}?>">

如何在不单独注释的情况下同时注释掉 HTML 和 PHP?

4

8 回答 8

8

感谢罗斯帕特森,我发现我完全误解了这个问题。所以这是新的答案。我保留下面的旧答案,因为它可能对某些人仍然有用。

新答案

您的案例很简单,因为您的代码中既没有 PHP 字符串,也没有注释。这意味着注释这段特定的代码很简单:

<?php
/*
<input type="hidden" name="returnurl" value="<?php if (!empty($link)) {echo $link;}?>">
*/
?>

问题是您迟早会发现自己处于这种情况下不起作用,因为注释代码本身包含注释。想象下面的一段代码:

<div>
  You're logged in.
  <?php
  /**
   * Says "hello" to the person.
   * @param string $name The name of the person.
   */
  function SayHello($name)
  {
    echo 'Hello, ' . $name;
  }

  SayHello($personName);
  ?>
</div>

您不可能将其嵌入到单个注释中,因为它会在第 7 行中断。

相反,您可以做的是使用NOWDOC 语法将代码嵌入字符串中,并且永远不要使用此字符串:

<?php
$GUID2328f09280b94c22867d831a885b57eb = <<<'GUID2328f09280b94c22867d831a885b57eb'
<div>
  You're logged in.
  <?php
  /**
   * Says "hello" to the person.
   * @param string $name The name of the person.
   */
  function SayHello($name)
  {
    echo 'Hello, ' . $name;
  }

  SayHello($personName);
  ?>
</div>
GUID2328f09280b94c22867d831a885b57eb
?>

几点说明:

  • 为什么我使用 NOWDOC 而不是简单的字符串?

    一个简单的字符串将在第 5 行中断(在“Says "hello"”上)。单引号字符串将在第 2 行中断(在“You're”上)。

  • 为什么我使用NOWDOC 而不是HEREDOC?

    因为我不想解析变量名。在这种上下文中解析变量会导致很难找到和调试的问题,因为范围发生了变化。

  • 这个可怕的 GUID2328 是什么……?

    我使用GUID来确保,首先,字符串永远不会在实际结束之前终止,其次,字符串变量永远不会在以后的代码中合理使用。我放了一个 GUID 前缀,因为 HEREDOC/NOWDOC 要求名称以字母开头,而不是数字。

    如果您觉得它丑陋和愚蠢,请随意使用您想要的任何语法。

  • 它会影响 Web 应用程序的性能,对吧?

    不要过早优化。初始化一个字符串可能会有性能成本,但要么它足够小而无需关心,要么甚至 PHP 解释器也足够聪明,可以优化代码并删除未使用的字符串(我非常怀疑)。

请注意,您不应该首先注释大量代码。如果您不需要该代码,只需将其删除即可。如果您认为以后可能需要它,让版本控制来处理它(您正在使用版本控制,是吗?)。


旧答案

你在为谁评论?

  • 开发商?然后在 PHP 中进行注释。例子:

    <?php /** The value is hidden for the moment to be backwards compatible, but the field
            * would be removed in the near future, since having this field presents a
            * security risk. See bug report 1422, http://example.com/bugs/1422 */ ?>
    <input type="hidden" name="returnurl" value="<?php if (!empty($link)) {echo $link;}?>">
    

    请记住,HTML 注释是公开显示的。像上面的例子那样发表评论是给黑客的礼物。

  • 用户?然后用 HTML 注释。例子:

    <!-- If `returnurl` is null or empty, the client would be redirected to the home page
         of the website. -->
    <input type="hidden" name="returnurl" value="<?php if (!empty($link)) {echo $link;}?>">
    

    在这里,目的是告诉用户一些有用的东西,例如屏幕废弃您的网站或做一些操作 HTML 的事情(我看到的唯一有效的例子是做一个真正的 API 对你来说太贵了,所以你授权并邀请用户直接解析 HTML 代码)。

请记住:

  1. 每个人都可以看到 HTML 注释,

  2. HTML 评论被发送到客户端,增加了带宽的使用。注意:在大多数情况下,您不在乎;除非您在 Google 主页上工作,否则不会有几个额外的字节会影响您网站的性能。

于 2013-04-06T22:39:34.917 回答
2

在编写您的示例时,您不能在不单独评论的情况下将两者都注释掉。

如果您让 PHP 打印 html 以及值,您可以一次完成所有操作。如:

<?php 
     print '<input type="hidden" name="returnurl" value="';
     if (!empty($link)) {echo $link;}
     print '">';
?>

当然还有更好的方法来写这个,但是现在你可以这样做:

<?php /*
     print '<input type="hidden" name="returnurl" value="';
     if (!empty($link)) {echo $link;}
     print '">';
     */
?>

PHP 被处理成 HTML,然后发送到请求页面的客户端。然后该客户端处理 HTML。所以 PHP 注释只能被 PHP 处理器看到,而 HTML 注释不会被 PHP 处理器触及,但是浏览器(客户端)会识别出 HTML 注释并相应地跳过它们。

希望这可以帮助。

于 2013-04-07T05:47:32.707 回答
1

如果你用很少或没有 HTML 注释 php 块,使用 php 注释,如果你用少量 PHP 注释大块 HTML,使用 HTML 注释。

将注释以最清晰和最具描述性的任何形式放置在任何地方,并尝试在整个编码过程中保持一致的风格。

您还应该根据您实际评论的内容进行区分。如果您要对 HTML 结构进行评论,如果您要评论 php 的详细信息,请使用 HTML,除非它位于 HTML 块的中间,否则请使用 php.ini。注释风格应该补充代码风格。

于 2013-04-06T20:43:41.743 回答
1

你有没有尝试过:

<?php /*
<input type="hidden" name="returnurl" value="<?php if (!empty($link)) {echo $link;}?>">
*/ ?>

我不太喜欢 PHP,但我认为这会起作用,除非它已经有一个*/

于 2013-04-07T03:23:40.053 回答
0

nibra是唯一理解这个问题并给出有价值答案的人。

<?php if(0) : ?>
...
<?php endif; ?>

这是我发现的最简单的方法,可以注释掉包含 PHP 的 HTML 代码块,而无需进入该块并摆弄其内容。

于 2013-11-19T06:41:00.177 回答
0
<!-- <input type="hidden" name="returnurl" value="<?php //if (!empty($link)) {echo $link;}?>"> -->

就这样

于 2013-04-07T07:10:35.670 回答
0

如果您可以在评论之前进行一些重写(我猜您不想只是删除代码)。

  1. 使代码全部为php,
  2. 将任何多行代码转换为一堆单行注释
  3. 最后使用php多行注释注释掉整个块

说你开始

<input type="hidden" name="returnurl" value="<?php 
/**
a multi line
comment here
*/
if (!empty($link)) {echo $link;}?>">

像这样转换

<?php 
echo :<input type="hidden" name="returnurl" value="";
//a multi line
//comment here
//
if (!empty($link)) {echo $link;}
echo ">";
?>

最后全部注释掉

<?php 
/*
echo :<input type="hidden" name="returnurl" value="";
//a multi line
//comment here
//
if (!empty($link)) {echo $link;}
echo ">";*/
?>
于 2013-04-08T12:33:01.177 回答
0

(暂时)停用代码的一种非常简单的方法是用

<?php if(0) : ?>
...
<?php endif; ?>

这独立于块内的任何注释样式。if(0)违反编码风格if (0)是有意的,因为它使以后更容易找到这些位置。

于 2013-04-08T13:09:31.397 回答