了解 PHP If 和 HTML 中的 else 语法


Understanding PHP If and else syntax in HTML

我试图了解如何在php中使用if和else语句以及HTMLdiv标签。我已经看到了 http://www.php.net/manual/en/control-structures.elseif.php 和 http://www.w3schools.com/php/php_if_else.asp 但它看起来与下面的工作示例不同。为什么一些 php if 和 else 语句有这么多的开场<?php和结束?>

工作示例

<a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name' ) ); ?>" rel="home">
<?php 
$headerImg = get_header_image();
if( !empty( $headerImg ) ) { ?>
<img src="<?php header_image(); ?>" height="<?php echo get_custom_header()->height; ?>" width="<?php echo get_custom_header()->width; ?>" alt="" />
<?php } 
else {
echo get_bloginfo( 'name' );
} ?>
</a>

我尝试包含 htmldiv

<a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name' ) ); ?>" rel="home">
<?php 
$headerImg = get_header_image();
if( !empty( $headerImg ) ) { ?>
<img src="<?php header_image(); ?>" height="<?php echo get_custom_header()->height; ?>" width="<?php echo get_custom_header()->width; ?>" alt="" />
<?php } else {
echo "<h2 class='site-description'>"<?php bloginfo( 'description' ); ?>"</h2>";
} ?>
</a>
错误:

解析错误:语法错误,意外的"?"

尝试替换

echo "<h2 class='site-description'>"<?php bloginfo( 'description' ); ?>"</h2>";

echo "<h2 class='site-description'>" . bloginfo( 'description' ) . "</h2>";

要保持以前的样式,请执行以下操作:

<?php } else { ?>
<h2 class='site-description'><?php echo bloginfo( 'description' ); ?></h2>
<?php } ?>

问题是你已经有一个打开的PHP标签,你正在尝试打开另一个。为此,请执行以下操作:

<?php } else {
    echo '<h2 class="site-description">', bloginfo( 'description' ), '</h2>';
} ?>

请注意,我已经更新了引号并使用逗号为您提供最佳性能。


要回答您关于 PHP 标签过多的问题:

  • 在第一个示例中,PHP 仅用于条件 - 如果条件为真,则调用一个 HTML 片段,如果条件为假,则调用另一个。此外,当您想要注入 PHP 输出(来自变量、函数等)时,您再次需要 PHP 标签(尽管有一个安全的短代码:<?= $var ?><?php echo $var; ?> 相同。这就是为什么你如此频繁地打开和关闭PHP标签。

  • 在第二个示例中,PHP 用于生成 HTML 输出(echo 函数),这就是为什么我们保留在单个 PHP 标签中并从那里处理所有内容的原因

他们都没有好坏之分。这取决于你需要什么。理想情况下,您希望避免完全编写意大利面条代码(混合语言),将所有PHP变量放在一个地方,将表示HTML放在另一个地方(并使用<?= $var ?>以模板引擎的方式插入PHP变量)。

<?php } else {
echo "<h2 class='site-description'>"<?php bloginfo( 'description' ); ?>"</h2>";
} ?>

应该是

<?php } else {
echo "<h2 class='site-description'>".bloginfo( 'description' )."</h2>";
} ?>

标签内的所有内容都被解释为 PHP,其他所有内容都直接发送到浏览器。您正在尝试打开 PHP 标签,尽管您已经在 PHP 中,这会导致错误。

一个带有语法突出显示的优秀文本编辑器将帮助您发现这些错误并更好地理解概念。查看记事本++以获取开源替代方案。

你不能在PHP标签中放置PHP标签。

您应该确保无论何时打开 PHP 标签,都需要在打开另一个标签之前将其关闭。我建议您使用在编写代码时显示颜色和错误的编辑器。

<a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name' ) ); ?>" rel="home">
<?php 
$headerImg = get_header_image();
if( !empty( $headerImg ) ) { ?>
<img src="<?php header_image(); ?>" height="<?php echo get_custom_header()->height; ?>" width="<?php echo get_custom_header()->width; ?>" alt="" />
<?php } else {
    $desc = bloginfo( 'description' );
    ?>
    <h2 class='site-description'><?php echo $desc; ?></h2>;
    <?php } ?>
</a>
<a href="<?=esc_url(home_url('/'));?>" title="<?=esc_attr(get_bloginfo('name'));?>" rel="home">
<? if(!empty(get_header_image())):?>
<img src="<?=header_image(); ?>" height="<?=get_custom_header()->height; ?>" width="<?= get_custom_header()->width; ?>" />
<? else: ?>
<h2 class='site-description'>"<?=bloginfo('description'); ?></h2>
<? endif; ?>
</a>

如果可以,请使用短标记和替代 if 语法,以使模板更具可读性。