php
2017-09-06 17 views 1 likes 
1

私はPHPでこのコードをデータベースから取得してページに表示していますが、テーブルが空でない場合にのみ表示します。関数にいくつかのコードをどのようにリファクタリングしますか?

これは私が(すべての質問ラベルがハードコードされている、彼らはDBから来ていない)、今持っているものです。

<?php  

foreach ($answers as $a) { 
    if ($a->q2 != '') { 
     echo "<span class='question'>Question title?</span><span class='answer'>" . $a->q2 . '</span><br />'; 
    } 

    if ($a->q3 != '') { 
     echo "<span class='question'>Question label 2?</span><span class='answer'>" . $a->q3 . '</span><br />'; 
    } 

    if ($a->q4 != '') { 
     echo "<span class='question'>Another question label?</span><span class='answer'>" . $a->q4 . '</span><br />'; 
    } 

    if ($a->q5 != '') { 
     echo "<span class='question'>Quesiton label?</span><span class='answer'>" . $a->q5 . '</span><br />'; 
    } 

    if ($a->q6 != '') { 
     echo "<span class='question'>Quesiton label?</span><span class='answer'>" . $a->q5 . '</span><br />'; 
    } 
} 

私は19個の質問の合計を持っている、と私はこのことを考えていませんそれを行うための最良のアプローチです、私はどのようにそれを関数で行うことができますか?

答えて

1

実際には、ここにコードが重複しているので、削除することをお勧めします。

あなたが行うことができ

function askQuestion($data, $question){ 
    if($data !='') { 
    echo "<span class='question'>$question</span><span class='answer'>".$data.'</span><br />'; 
    } 
} 

など、それを使用します。

foreach ($answers as $a) { 
    askQuestion($a->q2, "Question title?"); 
    askQuestion($a->q3, "Question label 2?"); 
    // and so on 

そして、親指の一般的なルールとして:あなたは、コードをrefactoreしようとしているときに忘れてはいけません最初に非回帰テストを行います(コードを改善しようとするとコードを破ることができないため)。

最新のアドバイス:従来のコードベースを定期的に使用する必要がある場合は、Working Effectively with legacy codeと読むことをお勧めします。このコードベースを使いやすくするためのヒントがたくさんあります。

+0

ありがとうございました。すべての作業がうまくいき、アドバイスをいただきありがとうございます:) – Radu033

関連する問題