Php 如何重构这些if语句?
我有以下代码:Php 如何重构这些if语句?,php,html,refactoring,Php,Html,Refactoring,我有以下代码: <div id="menu"> <ul> <li><span id="menulabel">Your Languages</span></li> <?php $hotClass = ''; $newClass = ''; $topClass = ''; if ($sort == 'hot')
<div id="menu">
<ul>
<li><span id="menulabel">Your Languages</span></li>
<?php
$hotClass = '';
$newClass = '';
$topClass = '';
if ($sort == 'hot')
$hotClass = 'active';
else if ($sort == 'new')
$newClass = 'active';
else if ($sort == 'top')
$topClass = 'active';
?>
<li><a id="Hot" href="index.php?sort=hot&page=1" class="<?php echo $hotClass; ?>">Hot</a></li>
<li><a id="New" href="index.php?sort=new&page=1" class="<?php echo $newClass; ?>">New</a></li>
<li><a id="Top" href="index.php?sort=top&page=1" class="<?php echo $topClass; ?>">Top</a></li>
</ul>
</div>
- 你的语言
根据页面使用的排序,会突出显示不同的菜单项以显示给用户。但是,我确实不喜欢这段代码,因为当列表项不活动时,类是空的,而不是不存在的。而且,每个if语句基本上做相同的事情。有没有可能把它重构成更优雅、更可读的东西?谢谢。使用“hot”“new”和“top as cases”进行切换,或者,如果第一个字符串与“$sort”值匹配,则使用两个字符串的方法,然后将第二个字符串设置为active使用“hot”“new”和“top as cases”进行切换,或者,如果第一个字符串与“$sort”值匹配,使用两个字符串的方法,然后将第二个字符串设置为活动 ,您可以考虑使用三进制……/p>
<div id="menu">
<ul>
<li><span id="menulabel">Your Languages</span></li>
<li><a id="Hot" href="index.php?sort=hot&page=1" class="<?php echo ($sort == 'hot') ? 'active' : '' ?>">Hot</a></li>
<li><a id="New" href="index.php?sort=new&page=1" class="<?php echo ($sort == 'new') ? 'active' : '' ?>">New</a></li>
<li><a id="Top" href="index.php?sort=top&page=1" class="<?php echo ($sort == 'top') ? 'active' : '' ?>">Top</a></li>
</ul>
</div>
编辑
正如马蒂斯指出的那样
您甚至可以将整个类声明放在操作符中,以避免以class=”“
`
<代码> > p>你可以考虑在这里使用三元……/p>
<div id="menu">
<ul>
<li><span id="menulabel">Your Languages</span></li>
<li><a id="Hot" href="index.php?sort=hot&page=1" class="<?php echo ($sort == 'hot') ? 'active' : '' ?>">Hot</a></li>
<li><a id="New" href="index.php?sort=new&page=1" class="<?php echo ($sort == 'new') ? 'active' : '' ?>">New</a></li>
<li><a id="Top" href="index.php?sort=top&page=1" class="<?php echo ($sort == 'top') ? 'active' : '' ?>">Top</a></li>
</ul>
</div>
编辑
正如马蒂斯指出的那样
您甚至可以将整个类声明放在操作符中,以避免以class=”“
`
- 你的语言
如果未启用“短标签”。如果启用了它们,则可以替换
- 你的语言
如果未启用“短标签”。如果启用了它们,您可以替换,我可以想到的另一种可能的方法是更改URL参数。试试这个:
<div id="menu">
<ul>
<li><span id="menulabel">Your Languages</span></li>
<li><a id="Hot" href="index.php?hot=active&page=1" class="<?php echo $_GET['hot']; ?>">Hot</a></li>
<li><a id="New" href="index.php?new=active&page=1" class="<?php echo $_GET['new']; ?>">New</a></li>
<li><a id="Top" href="index.php?top=active&page=1" class="<?php echo $_GET['top']; ?>">Top</a></li>
</ul>
</div>
- 你的语言
我能想到的另一种可能的方法是更改URL参数。试试这个:
<div id="menu">
<ul>
<li><span id="menulabel">Your Languages</span></li>
<li><a id="Hot" href="index.php?hot=active&page=1" class="<?php echo $_GET['hot']; ?>">Hot</a></li>
<li><a id="New" href="index.php?new=active&page=1" class="<?php echo $_GET['new']; ?>">New</a></li>
<li><a id="Top" href="index.php?top=active&page=1" class="<?php echo $_GET['top']; ?>">Top</a></li>
</ul>
</div>
- 你的语言
是否可以使用循环和数组
<div id="menu">
<ul>
<li><span id="menulabel">Your Languages</span></li>
<?php
foreach(array("Hot","New","Top") as $Id) {
$class = '';
if ($sort == strtolower($Id)) $class = 'active';
echo "<li><a id='$Id' href='index.php?sort=".strtolower($Id)."&page=1' class='$class'>$Id</a></li>";
}
?>
</li>
</ul>
</div>
- 你的语言
是否可以使用循环和数组
<div id="menu">
<ul>
<li><span id="menulabel">Your Languages</span></li>
<?php
foreach(array("Hot","New","Top") as $Id) {
$class = '';
if ($sort == strtolower($Id)) $class = 'active';
echo "<li><a id='$Id' href='index.php?sort=".strtolower($Id)."&page=1' class='$class'>$Id</a></li>";
}
?>
</li>
</ul>
</div>
- 你的语言
这里有另一个建议,重复性要少一些
<?php
function sortClass($val) {
return ($sort == $val) ? 'class="active"' : '';
}
?>
<li><a id="Hot" href="index.php?sort=hot&page=1" <?=sortClass('hot');?> >Hot</a></li>
<li><a id="New" href="index.php?sort=new&page=1" <?=sortClass('new');?> >New</a></li>
<li><a id="Top" href="index.php?sort=top&page=1" <?=sortClass('top');?> >Top</a></li>
这里有另一个建议,重复性要少一些
<?php
function sortClass($val) {
return ($sort == $val) ? 'class="active"' : '';
}
?>
<li><a id="Hot" href="index.php?sort=hot&page=1" <?=sortClass('hot');?> >Hot</a></li>
<li><a id="New" href="index.php?sort=new&page=1" <?=sortClass('new');?> >New</a></li>
<li><a id="Top" href="index.php?sort=top&page=1" <?=sortClass('top');?> >Top</a></li>
既然您在这里处理演示(即添加一个CSS类,很可能只是改变外观),您还可以使用JavaScript(ala)应用样式:
既然您正在处理这里的演示(即添加一个CSS类,很可能只是改变外观),您还可以使用JavaScript(ala)应用样式:
如果您使用的是短标签,为什么不直接使用他的PHP版本可能没有启用短标签,所以我把它放在没有启用的情况下。我说了如何在代码下面使用短标记……因为您使用的是如果您使用的是短标记,为什么不直接使用呢?他的PHP版本可能没有启用短标记,所以我把它放在没有启用的情况下。我说了如何在代码下面使用短标记……因为您使用的是,如果您不喜欢可能的空类属性,您甚至可以将它们放在里面,就像如果您不喜欢可能的空类属性,您甚至可以将它们放在里面一样