PHP代码重构

时间:2011-02-06 14:03:17

标签: php refactoring

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

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

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

5 个答案:

答案 0 :(得分:3)

内置有:

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

它仍然需要(int)类型转换,我会直接将它应用于$ _GET访问。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

function myFunction($getparam, $equals){
  if(!is_int($getparam) || $getparam < $equals)
    return $equals
  return 'your actual return value';     
}

这是你打算做的事情:)?

答案 3 :(得分:0)

function positiveInt($value, $maxValue = 0) {
    $value = (int) $value;
    return ( $value < $maxValue ) ? $maxValue : $value;
}

$start = positiveInt($_GET['s']);

$start = positiveInt($_GET['s'], 5);

答案 4 :(得分:0)

使用ternary operator会很有帮助。并非所有人都认为三元操作易于阅读。我想是一个偏好的问题。

function unsignedInt($int) {
    return (int) $int >= 0 ? (int) $int : 0;
}

$start = unsignedInt($_GET['s']);

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

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

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

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

所以我认为这取决于您计划在代码中使用此方法的方式。