3

我是 PHP 新手,大部分时间我都在“回显”我的 HTML。今天,我发现了这种方法,它让事情变得简单了 1000 倍:

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

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

<?php } ?>

但这是一种公认​​的方式吗?它似乎每次都有效。谢谢。

4

3 回答 3

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 手册说See Are PHP short tags是否可以使用?PHP echo vs PHP 短标签Since PHP 5.4.0, <?= is always available.

在引擎盖下发现了什么

里面<?php ?>的所有东西都由 PHP: Hypertext Preprocessor 解析,所以有人可能会说它需要更多的资源来使用echo '<html><here>';,但是如果你没有超过 100000echoprint's + 开始<?php和结束?>需要很少的指令,这又是一个错误的地方进行优化同样echo,在计算 cpu 指令时它们几乎相同,至少在我的安装中是这样。
请参阅PHP 脚本究竟是如何执行的?
以及Sebastian Bergmann 的php.net/manual/en/tokens.php
PHP 编译器内部幻灯片

关于性能的一些测试:

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

我真的认为最重要的是您喜欢如何编写/阅读代码。有时最好先写后读
if (...) { echo "something"; }
,有时
<?php if (...) { ?>something<?php } ?>

就我个人而言,我更喜欢echo "...";在有很多变量或仅打印出一小段文本以及?>...<?php输出大块 html 或只有很少变量的长文本时使用。这使代码更易于阅读。

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

如果我猜对了,php首先进行词法分析并将结果传递给加速器,从这个角度来看?>text<?phpecho "text";有很大的不同,但它仍然不会改变普通网站项目的性能。
更清楚:加速器本身确实提高了性能,但关于使用?>text<?phpecho "text";没有太大的区别。

最终答案:

是的,它被广泛接受和使用,但我认为(至少没有从 PHP 文档中找到任何明确的内容)它仍然是未记录的方式,但是,正如您已经知道的那样,它不仅仅是方式。基本上,它的作用与使用 echo 相同:

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

在尝试查找官方文档时,我已阅读以下页面:
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
使用谷歌,并搜索了一些论坛。

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

<?php if ($a == 5): ?>
A is equal to 5
<?php endif; ?>

更新:

关于分离条件语句的官方文档在这里:control-structures.intro{language.basic-syntax.phpmode.php一起记录了它,但是只有替代方法的演示(见上文)。}<?php?>

于 2012-05-02T10:13:25.480 回答
0

It is. But it has also become a standard to omit the ending ?> in every file, so there is no trailing whitespace or line ending in the output.

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

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

<?php }

If enabled in your php.ini, you can also use short tags (<? instead of <?php)

于 2012-05-02T10:02:03.650 回答
-1

我建议您对控制结构使用替代语法

于 2012-05-02T09:59:37.163 回答