【问题标题】:PHP code refactoringPHP代码重构
【发布时间】:2011-02-06 14:03:17
【问题描述】:

你会如何重构这样的东西:

$start = $_GET['s'];
if (!is_int($start) || $start < 0)
{
    $start = 0;
}

这里我需要开始等于 0 或更大,但稍后我需要它等于 1 或更大。这将如何变成一个函数?

【问题讨论】:

  • 为什么要把它变成一个函数?老实说,我真的看不出这里有什么急需重构的东西
  • 抱歉,我打开了两个窗口,所以我打错了标题。

标签: php refactoring


【解决方案1】:

有一个内置的:

print max($_GET["s"], 0);

它仍然需要(int) typcast,我会直接将它应用到 $_GET 访问。

【讨论】:

    【解决方案2】:

    此代码将不起作用。 $_GET 将返回一个字符串。 is_int 总是会失败。您应该使用 is_numeric 或 typecast 到 int。

    function minimal($value, $min)
    {
        $value = (int)$value;
        if ($value < $min)
        {
            return $min;
        }
        return $value;
    }
    

    【讨论】:

      【解决方案3】:
      function positiveInt($value, $maxValue = 0) {
          $value = (int) $value;
          return ( $value < $maxValue ) ? $maxValue : $value;
      }
      
      $start = positiveInt($_GET['s']);
      
      $start = positiveInt($_GET['s'], 5);
      

      【讨论】:

        【解决方案4】:
        function myFunction($getparam, $equals){
          if(!is_int($getparam) || $getparam < $equals)
            return $equals
          return 'your actual return value';     
        }
        

        这是你打算做的:)?

        【讨论】:

          【解决方案5】:

          使用ternary operator 会很有帮助。不是每个人都觉得三元运算易于阅读。我想这是一个偏好问题。

          function unsignedInt($int) {
              return (int) $int >= 0 ? (int) $int : 0;
          }
          
          $start = unsignedInt($_GET['s']);
          

          虽然这仍然可能显示警告(该函数不能确保 $_GET['s'] 存在),但我个人可能会在脚本顶部声明我预期的 get var:

          $_GET['s'] = isset($_GET['s']) ? $_GET['s'] : '';
          

          由于函数非常相似,我可以在变量声明中完成所有操作,而不是使用函数:

          $start = isset($_GET['s']) && (int) $_GET['s'] >= 0 ? (int) $_GET['s'] : 0;
          

          所以我想这取决于您打算如何在代码中使用此方法。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-10-26
            • 2010-12-24
            • 1970-01-01
            • 2017-01-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多