这是将HTML放入PHP的正确方法吗?

时间:2012-05-02 09:56:41

标签: php xhtml standards echo language-features

我是PHP的新手,大多数时候我一直在'回应'我的HTML。今天,我找到了这样做的方式,这使事情变得容易1000倍:

<?php if(get_field('field_name')){ ?>

   <p>HTML can go here without echo'ing it</p>

<?php } ?>

但这是一种可接受的方式吗?它似乎每次都有效。感谢。

3 个答案:

答案 0 :(得分:2)

主要是关于你喜欢阅读代码的方式。

对于具有自动完成/代码建议的IDE,最好使用 <?php if (...) { ?>以便自动完成/建议功能知道何时使用html以及何时为您的代码提供php建议。当然,选择以后易于阅读的编码风格也很不错。
据我所知,代码突出显示不起作用,内部不应该工作

echo '<div class="c"><h2>...';

不同的编码风格:

除了已经提到的内容之外,没有太大的区别。例如使用

echo "<div>$var1<h1>$var2</h1>...";

用于插入变量更容易(少写),代码占用空间更小,更容易阅读:

<?php 
// <= Some code...
?><div><?php echo $var1; ?><h1><?php echo $var2; ?></h1>...

短开标签/为何不使用:

还有<?= ?>个快捷方式,但我没有使用它,因为它需要设置PHP配置(并不总是可用/可更改/可写)值short_open_tag。但PHP手册说 Since PHP 5.4.0, <?= is always available.
Are PHP short tags acceptable to use?
PHP echo vs PHP short tags

在引擎盖下发现了什么

PHP {1}}内的所有内容都由PHP解析:超文本预处理器,所以有人可能会说使用<?php ?>需要更多资源,但如果你还没有结束,这也是做错优化的错误地方100000 echo '<html><here>';echo的+开始print和结束<?php也需要很少的指令,?>所以它们在计算cpu指令时几乎相同,至少我的安装。
How exactly is a PHP script executed?
php.net/manual/en/tokens.php
PHP Compiler Internals slides by Sebastian Bergmann

关于性能的一些测试:

1.77s。:1 000 000次echo
1.61s:1 000 000次$var = rand(0, 1); echo 'Foo Bar '.$var;
1.83s:1 000 000次$var = rand(0, 1); ?>Foo Bar <?php echo $var; ?><?php

我真的认为最重要的是你喜欢写/读代码。有时最好写一下,然后再阅读$var = rand(0, 1); echo "Foo Bar $var";
有时是if (...) { echo "something"; }

我个人更喜欢使用<?php if (...) { ?>something<?php } ?>,当有很多变量或只打印出一小段文本时echo "...";输出大量的html或长文本时只有很少的变量。这使代码更容易阅读。

关于评论中提到的加速器:

如果我做对了,php首先进行词法分析并将结果传递给加速器,从这个角度来看?>...<?php?>text<?php有很大差异,但它仍然没有改变正常网站项目中的性能。更明确:加速器本身确实提高了性能,但使用echo "text";?>text<?php并没有太大的区别。

最终答案:

是的,它被广泛接受和使用,但我认为(至少没有从PHP文档中找到任何清楚的东西)它仍然是无证的方式,但是,正如你已经知道它不仅仅是方式。基本上它就像使用echo一样工作:

echo "text";

在尝试查找官方文档时,我已阅读这些页面:
php.net/manual/en/control-structures.alternative-syntax.php
php.net/manual/en/language.basic-syntax.phpmode.php
php.net/manual/en/language.types.string.parsing.complex
使用谷歌,搜索一些论坛。

似乎没有经常使用明确记录的 alternate 方式:

if ( get_field('field_name') ) {
   echo "<p>HTML can go here by echo'ing it</p>";
}

更新

有关在条件语句中按<?php if ($a == 5): ?> A is equal to 5 <?php endif; ?> {分隔}<?php的官方文档在此处:control-structures.introlanguage.basic-syntax.phpmode.php一起记录在案但是,只有替代方式才能进行演示(见上文)。

答案 1 :(得分:0)

是的。但它也成为在每个文件中省略结尾?>的标准,因此输出中没有尾随空格或行结束。

<?php if(get_field('field_name')){ ?>

   <p>HTML can go here without echo'ing it</p>

<?php }

如果在php.ini中启用,您还可以使用短标记(<?代替<?php

答案 2 :(得分:-1)