关于简化 PHP 语句的建议

Advise on simplifying a PHP statement

我是 PHP 的新手,正在为 Joomla K2 项目布局编写模板文件。

我配置了一个 'extra field' $extrafields[15],输出为 "Yes"、"No" 或“”。 $extrafields[16] 是一个文本字符串。

我有这段代码,它可以工作,但我希望得到有关如何简化它的建议,因为我知道它可能有点粗糙!

if (!empty($extrafields[15])): 
    if ($extrafields[15] == "Yes") {
        echo "<span class=sgl-bold>Sponsored by:&nbsp;</span>"; 
    }

    if ($extrafields[15] == "Yes"):
        if (!empty($extrafields[16])):
            echo $extrafields[16]; 
        endif;
        echo "<br>";
    endif;
endif;
if (@$extrafields[15] == "Yes") { 
    echo "<span class=sgl-bold>Sponsored by:&nbsp;</span>"; 
    echo @$extrafields[16]; 
    echo "<br>";
}

我倾向于做这样的事情:

if(!empty($extrafields[15]) && !empty($extrafields[16])){ 
    if($extrafields[15] == "Yes"){
        echo "<span class=sgl-bold>Sponsored by:&nbsp;</span>"; 
        echo $extrafields[16]; 
        echo "<br>";
    } //endif not empty
} //endif yes

您可以通过一些简单的调整使您的代码更加简洁:

  • 尽可能去掉多余的 if 子句,
  • 在有意义的地方组合 if 子句条件,并且
  • 不要使用 alternative syntax 控制结构来减少噪音。

以下代码片段保留了与您最初尝试相同的功能,但恕我直言,它更易于理解。

if (!empty($extrafields[15]) && 'Yes' === $extrafields[15]) {
    echo '<span class=sgl-bold>Sponsored by:&nbsp;</span>';
    if (!empty($extrafields[16])) {
        echo $extrafields[16];
    }
    echo '<br>';
}

也就是说,从上下文来看,您可能想要使用此处发布的 BigScar。

为了让这段代码更容易理解,您应该考虑处理数据结构(尽管我认为这是 Joomla 强加给您的):

  • 而不是像 $extrafields[16] 这样的数字数组中的值,使用像 $showSponsor 或类似的说话变量名称,并且
  • 使用布尔值 truefalsenull 而不是 'Yes'、'No' 和 '' 的字符串值。

记住:

There are only two hard things in Computer Science: cache invalidation and naming things.