所以我在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个问题,我不认为这是最好的方法,我怎么能在函数中做到这一点?
答案 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,它提供了许多实用技巧,可以将这些代码库变成更容易使用的东西。