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版本可能没有启用短标记,所以我把它放在没有启用的情况下。我说了如何在代码下面使用短标记……因为您使用的是
    ,如果您不喜欢可能的空类属性,您甚至可以将它们放在里面,就像如果您不喜欢可能的空类属性,您甚至可以将它们放在里面一样