0

我最近才开始使用 PHP 5.4,并注意到从 5.3 开始,您可以使用 goto 跳转到我用来从循环部分跳转的代码部分。我的问题是在阅读了这篇文章之后...... PHP 中的 GOTO 是邪恶的吗?在这种情况下这是不好的做法还是可行的解决方案?

<?php
while ($thisResult = mysql_fetch_array($result)) {      
    if($article && $i > 0) {
        goto comments;
    }

?>
    <h2>
        <a href="/plugins/<?=$thisResult['post_name']?>"><?=$thisResult['post_title']?></a>
        <span><?=$thisResult['post_modified_gmt']?></span>
    </h2>
    <p class="content">
        <?=nl2br($thisResult['post_content']);?>
    </p>
    <br />  
 <?php
    comments: 
        if ($article) {
?>
        <p class="comment"><?=$thisResult['comment_content']?>
<?php
        }

    $i++;
}

 ?>
4

2 回答 2

1

这被称为意大利面条式编程,是一种不好的做法。 http://en.wikipedia.org/wiki/Spaghetti_code

这是您可以为您的代码做的事情

    <?php
    while ($thisResult = mysql_fetch_array($result)) {      
        if($article && $i > 0) {

        }
    else {
    ?>
        <h2>
            <a href="/plugins/<?php $thisResult['post_name']?>"><?php $thisResult['post_title']?></a>
            <span><?php $thisResult['post_modified_gmt']?></span>
        </h2>
        <p class="content">
            <?php nl2br($thisResult['post_content']);?>
        </p>
        <br />  
     <?php
    }
            if ($article) {
    ?>
            <p class="comment"><?php $thisResult['comment_content']?>
    <?php
            }

        $i++;
    }

     ?>

一个简单的 else 解决了它。您可能可以使用开关盒或标志找到更优雅的解决方案。

问题是你的代码很难编辑和添加东西。

于 2013-03-13T14:56:39.653 回答
1

这是在不使用的情况下重写相同的代码goto,向您展示没有它也可以随时完成

<?php
    while ($thisResult = mysql_fetch_array($result)):
        if(!$article || $i <= 0): ?>
            <h2>
                <a href="/plugins/<?php echo $thisResult['post_name']; ?>"><?php echo $thisResult['post_title']; ?></a>
                <span><?php echo $thisResult['post_modified_gmt']; ?></span>
            </h2>
            <p class="content">
                <?php echo nl2br($thisResult['post_content']); ?>
            </p>
            <br />
        <?php endif; ?>
        <?php if ($article): ?>
            <p class="comment"><?php echo $thisResult['comment_content']; ?></p>
        <?php endif;
        $i++;
    endwhile;

我对控制结构使用了替代语法,并替换<?=<?php echo它对我来说更具可读性。另外,其他评论者给了你一些关于标记和数据库函数分离等的好建议,所以请考虑一下

于 2013-03-13T14:57:44.820 回答