考虑以下示例:
<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代码解析的问题和/或弱点。
答案 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块的位置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再没有错!