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

これは、を使用せずに同じコードを書き直したものであり、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また、他のコメント投稿者から、マークアップ関数とdb関数の分離などについて良い提案がありましたので、考えてみてください。

于 2013-03-13T14:57:44.820 に答える
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 に答える