我如何将一些代码重构为函数?

时间:2017-09-06 10:09:18

标签: php

所以我在php中有这个代码,从数据库中获取一些数据并在页面上显示它,但我想只在表不为空时显示它。

这就是我现在所拥有的(所有问题标签都是硬编码的,它们不是来自数据库):

<?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 个答案:

答案 0 :(得分: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

并且,作为一般的经验法则:当您要重构代码时,不要忘记首先进行非回归测试(因为在我们尝试时,破坏代码会太糟糕了改善它。)

最后的建议:如果你必须定期使用遗留代码库,你可以阅读Working Effectively with legacy code,它提供了许多实用技巧,可以将这些代码库变成更容易使用的东西。