【问题标题】:Understanding PHP If and else syntax in HTML了解 HTML 中的 PHP If 和 else 语法
【发布时间】:2014-03-31 07:51:22
【问题描述】:

我试图了解如何在 php 中使用 if 和 else 语句以及 HTML div 标签。我见过http://www.php.net/manual/en/control-structures.elseif.phphttp://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>

我尝试包含 html div

<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>

错误:解析错误:语法错误,意外'?'

【问题讨论】:

  • 也许你想用heredoc 来做这样的事情?
  • @Class 为什么?这些是条件之间的单线。

标签: php html


【解决方案1】:

尝试替换

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

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

【讨论】:

    【解决方案2】:

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

    <?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 的一个 sn-p,如果条件为假,则调用另一个。此外,当您想要注入 PHP 输出(来自变量、函数等)时,您需要再次使用 PHP 标记(尽管有一个安全的短代码:&lt;?= $var ?&gt;&lt;?php echo $var; ?&gt; 相同。这是为什么你经常打开和关闭 PHP 标记。

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

    它们都不好也不坏。这取决于你需要什么。理想情况下,您希望完全避免编写意大利面条式代码(混合语言),将所有 PHP 变量放在一个位置,将演示文稿 HTML 放在另一个位置(并使用 &lt;?= $var ?&gt; 以模板引擎方式插入 PHP 变量)。

    【讨论】:

    • 不客气!另外,为了解释为什么我说最大性能:PHP中的单引号比双引号快(这里谈论毫秒),因为没有进行解析......用于回显的逗号方法比点方法更快,因为没有发生连接(将所有字符串组合成一个然后打印它,而不是一一打印它们)。
    • @BabyAzerty,是的,我刚刚在之前的评论中解释过,不仅它有效,而且会给你带来更好的性能。
    【解决方案3】:
    <?php } else {
    echo "<h2 class='site-description'>"<?php bloginfo( 'description' ); ?>"</h2>";
    } ?>
    

    应该是

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

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

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

    【讨论】:

      【解决方案4】:

      你不能在 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>
      

      【讨论】:

        【解决方案5】:
        <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>
        

        如果可以,请使用短标签,并使用替代语法以使您的模板更具可读性。

        【讨论】:

          猜你喜欢
          • 2015-07-07
          • 2016-07-21
          • 1970-01-01
          • 2022-01-10
          • 1970-01-01
          • 2012-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多