php if,else if,以及是否在包含php语句的代码块上

时间:2012-08-28 23:02:07

标签: php if-statement

我想使用<?php if (statement): ?><?php else if (statement): ?><?php else: ?>行来使我的代码更具可读性。我不太确定这是否是正确的语法。我也想知道我是否可以在这些if块中使用php代码。这就是我正在使用的:

<?php $blogexcerpt = $Blog->create_excerpt(html_entity_decode($post->content), 0, 250); ?>
<!-- if the blogexcerpt contains less than 5 non-white spaces assume there is media and use the "View Media" tag -->
<?php if ( strlen(preg_replace( '/\s+/', ' ', $blogexcerpt)) < 5 ): ?>
<h5 style="margin:0px;"><a href="<?php echo $Blog->get_blog_url('post').$post->slug; ?>" class="blog_post_link">View Media…</a></h5>
<!-- else if the blog post is less than excerpt length post entire -->
<?php else if ( strlen($Blog->create_excerpt(html_entity_decode($post->content), 0, 255)) < 250 ): ?>
<?php echo $blogexcerpt; ?>
<h5 style="margin:0px;"><a href="<?php echo $Blog->get_blog_url('post').$post->slug; ?>" class="blog_post_link">View post</a></h5>
<!-- else show excerpt -->
<?php else: ?>
<?php echo $blogexcerpt; ?><span style="display: inline;">…</span>
<h5 style="margin:0px;"><a href="<?php echo $Blog->get_blog_url('post').$post->slug; ?>" class="blog_post_link">Read more…</a></h5>
<?php endif>

3 个答案:

答案 0 :(得分:4)

在这个特定情况下,我会选择所有PHP使其可读:

<?php
$blogexcerpt = $Blog->create_excerpt(html_entity_decode($post->content), 0, 250);

if ( strlen(preg_replace( '/\s+/', ' ', $blogexcerpt)) < 5 ) {
    echo '<h5 style="margin:0px;"><a href="' . $Blog->get_blog_url('post').$post->slug; . '" class="blog_post_link">View Media…</a></h5>';
} else if ( strlen($Blog->create_excerpt(html_entity_decode($post->content), 0, 255)) < 250 ) {
    echo $blogexcerpt;
    echo '<h5 style="margin:0px;"><a href="' . $Blog->get_blog_url('post').$post->slug; . '" class="blog_post_link">View post</a></h5>';
} else {
    echo $blogexcerpt;
    echo '<span style="display: inline;">…</span>';
    echo '<h5 style="margin:0px;"><a href="' . $Blog->get_blog_url('post').$post->slug; . '" class="blog_post_link">Read more…</a></h5>';
}

虽然这可能仅仅是个人偏好,但我认为这更具可读性,然后让所有<?php ?>的所有人保持混合打开和关闭PHP模式。

一些恕我直言的好处:

  • 打开和关闭花括号(虽然对模板材料的看法不同,但你会看到你最喜欢的东西)
  • 适当的缩进
  • 整个地方没有打开和关闭<?php ?>标签

<强> PS

你确定帖子是html实体编码的吗?你确定你真的想解码它们吗?大多数时候你可以逃脱htmlspecialchars()。在显示之前解码通常是一个坏主意,可能会引入XSS漏洞。不过你的具体情况不确定。只是提醒你看你在做什么:-)例如你确定要解码它而不是编码它来阻止XSS吗?

<强> PPS

最后一件事。在我们忙于使其更具可读性时,您应该将该内联CSS放在他的评论中所述的Paul

答案 1 :(得分:2)

迈克尔,

简短的回答是肯定的。

你需要以分号结尾:<? endif; ?>

答案 2 :(得分:0)

有时缩进有助于使事物可读(包含在文档中以显示PHP / HTML缩进如何共存):

<?php
$blogexcerpt = $Blog->create_excerpt(html_entity_decode($post->content), 0, 250);
?>
<html>
    <body>
<?php if ( strlen(preg_replace( '/\s+/', ' ', $blogexcerpt)) < 5 ): ?>
        <h5 style="margin:0px;"><a href="<?php echo $Blog->get_blog_url('post').$post->slug; ?>" class="blog_post_link">View Media…</a></h5>
<?php elseif ( strlen($Blog->create_excerpt(html_entity_decode($post->content), 0, 255)) < 250 ): ?>
        <?php echo $blogexcerpt; ?>
        <h5 style="margin:0px;"><a href="<?php echo $Blog->get_blog_url('post').$post->slug; ?>" class="blog_post_link">View post</a></h5>
<?php else: ?>
        <?php echo $blogexcerpt; ?><span style="display: inline;">…</span>
        <h5 style="margin:0px;"><a href="<?php echo $Blog->get_blog_url('post').$post->slug; ?>" class="blog_post_link">Read more…</a></h5>
<?php endif; ?>
    </body>
</html>