如何使用嵌套在PHP if语句中的HTML块来避免Netbeans错误

时间:2011-01-10 17:44:41

标签: php html netbeans

考虑以下示例:

<table>
    <tr>
        <td>Row One</td>
    </tr>
    <?php
    if ($rowtwo)
    {
    ?>
    <tr>
        <td>Row Two</td>
    </tr>
    <?php
    }
    ?>
</table>

如果$rowtwo为真,则输出第二行,否则跳过。

代码按预期工作,但我正在将Netbeans(7 beta)评估为PHP IDE(而不仅仅是使用文本编辑器)。 Netbeans标记代码时出错:

  

错位的非空格字符   [原文如此]。

我应该考虑另一种编写此代码的方法,还是Netbeans无法理解HTML输出的流控制包装?

修改

该示例未显示我最初使用的缩进,但是各种缩进方法不会影响Netbeans将其标记为错误。

删除<?php?>标记之前的空格以及使用endif;而不是花括号都会产生相同的功能,但仍然会被标记。

我认为这是Netbeans代码解析的问题和/或弱点。

5 个答案:

答案 0 :(得分:2)

PHP的一个优点是能够在HTML中直接插入PHP代码片段。你上面的代码很好。或者,您可以这样做,但两者完全相同。

<table>
    <tr>
        <td>Row One</td>
    </tr>
    <?php
    if($rowtwo) {
      echo "<tr>\n";
      echo "\t\t<td>Row Two</td>\n";
      echo "\t</tr>\n";
    }
    ?>
</table>

答案 1 :(得分:1)

这是PHP和其他类似语言中表示视图的非常典型的语法。它不优雅,可能会混淆IDE,但通常不会被认为是不好的做法。

答案 2 :(得分:1)

您的代码是有效的PHP。 Netbeans可能试图将其验证为HTML,但我对netbeans知之甚少。

一些建议:

  • 不要在php开启标签(<?php)之前放置空格,这样可以更轻松地扫描文件并查看php块的位置
  • if (...): endif;块用于HTML内容:

即:

<table>
  <tr>
    <td>Row One</td>
  </tr>
<?php if ($rowtwo): ?>
  <tr>
    <td>Row Two</td>
  </tr>
<?php endif; ?>
</table>

它有助于您查看if语句的结束位置,而不是尝试确定哪个结束括号。您也可以为other control structures执行此操作。

编辑以获取更多详细信息:

我用我的php缩进打破了我的HTML缩进。下一级块看起来像这样:

<table>
  <tr>
    <td>Row One</td>
  </tr>
<?php if ($rowtwo): ?>
  <tr>
    <td>Row Two</td>
  </tr>
<?php   if ($condition): ?>
  <tr>
    <td>More Content</td>
  </tr>
<?php   endif; ?>
  <tr>
    <td>Even more content</td>
  </tr>
<?php endif; ?>
</table>

我还应该提到我的body元素缩进了一个级别,所以我很少有html与我的php标签齐平。通常它更像是:

    <table>
<?php if ($condition): ?>
      <tr><td></td></tr>
<?php endif; ?>
    </table>

这有助于使PHP脱颖而出。

答案 3 :(得分:0)

我的标准几乎可以接受(我在其他人的代码中寻找的内容)。我要做的唯一改变是正确缩进,以便更容易一目了然地看到发生了什么(使你的代码更具可读性)。例如:

<table>
    <tr>
        <td>Row One</td>
    </tr>
    <?php
    if ($rowtwo) {
        ?>
        <tr>
            <td>Row Two</td>
        </tr>
        <?php
    }
    ?>
</table>

这样一来,看看if构造一目了然地在哪里是微不足道的......

答案 4 :(得分:0)

在一定程度上练习或错误都不错。 但是,更好的做法是将显示逻辑与业务逻辑分开。您的IDE可能正在假设这一点,因此与混合代码混淆。

但是,混合html / php再没有错!