使用PHP将多个if语句压缩为一个(对于Joomla)?

时间:2014-05-08 15:53:34

标签: php joomla

万一有人不熟悉Joomla,countModules是内置的功能。另外请记住,我对PHP不是很熟悉..而且我很擅长使用它。请尽量保持任何解决方案的简单易懂。感谢。

我的问题是我可以压缩这个:

if($this->countModules('Top1A and Top1B') >= 1) $modCellRow1 = "col2";
if($this->countModules('Top1B and Top1C') >= 1) $modCellRow1 = "col2";
if($this->countModules('Top1A and Top1C') >= 1) $modCellRow1 = "col2";

进入这个:

if ($this->countModules('Top1A and Top1B') >= 1) || ($this->countModules('Top1A and Top1B') >= 1) || ($this->countModules('Top1A and Top1C') 
{
$modCellRow1 = "col2";
}

如果您确实知道Joomla和countModules ......或者即使您不知道,请记住我正在检查每个模块位置是否有任何内容,而不是计算有多少实际模块。换句话说,我需要使用AND作为运算符。此外,我不想包括所有三个,因为这是我的代码中的另一行...例如:

if($this->countModules('Top1B and Top1B and Top1C') >= 1) $modCellRow1 = "col3";

我正在检查那些其他陈述是否只有两个模块位置中的某些东西......(IE中只有两个等于或大于一个......但不是全部三个)

其他评论/问题:

那会有用吗?

$topRow1Count = 0;
foreach(array('Top1A','Top1B','Top1C','Top1D') as $position) {
    if ($this->countModules($position)) {$colCount += 1;}
}
$modColCountTopRow1 = "col" . $topRow1Count;
if ($topRow1Count == 0) { $modTopRow1 = " hidden"; }

$topRow2Count = 0;
foreach(array('Top2A','Top2B','Top2C','Top2D') as $position) {
    if ($this->countModules($position)) {$colCount += 1;}
}
$modColCountTopRow2 = "col" . $topRow2Count;
if ($topRow2Count == 0) { $modTopRow2 = " hidden"; }

if ($topRow1Count + $topRow2Count == 0) { $topModCont1 = " hidden"; }

1 个答案:

答案 0 :(得分:2)

是的,它会起作用。但是让我们考虑一下性能和可读性。

<强>性能

对于“col2”情况,您正在调用countModules 3次,对于“col3”情况,假设您以“col1”开头,它将进行4次调用,每次调用都有多个“位置”来检查。 现在countModules()代码已经过优化,可以回退到一个静态类,它不会在每次迭代时查询数据库;但即使在一个模块很少的小网站上,你仍然会使你的程序慢10倍。

可读性&amp;代码质量

您可能已经读过代码看起来不应该像复制和粘贴一样。这是有道理的,至少因为它更容易阅读避免重复的代码,另外它也不太容易出现错别字。

本着凝聚多个陈述的精神,不考虑加入行,为什么不考虑:

$colCount = 0;
foreach(array('Top1A','Top1B','Top1C') as $position) {
    if ($this->countModules($position)) {
        $colCount += 1;
    }
}
$modCellRow1 = "col" . $colCount;

如果没有任何模块处于任何位置,则返回"col0""col1"如果模块仅存在于一个中,则返回{/ p>。

我写了它,所以最容易阅读,