Рефакторинг PHP кода - PullRequest
       8

Рефакторинг PHP кода

0 голосов
/ 06 февраля 2011

Как бы вы реорганизовали что-то вроде этого:

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

Здесь мне нужно начать с 0 или больше, однако позже мне понадобится, чтобы оно было равно 1 или больше.Как это можно превратить в функцию?

Ответы [ 5 ]

3 голосов
/ 06 февраля 2011

Для этого есть встроенная функция:

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

Для этого все еще требуется набрать (int), и я бы применил его непосредственно к доступу $ _GET.

1 голос
/ 06 февраля 2011

Этот код не будет работать.$ _GET вернет строку.is_int всегда потерпит неудачуВы должны использовать is_numeric или typecast для int.

function minimal($value, $min)
{
    $value = (int)$value;
    if ($value < $min)
    {
        return $min;
    }
    return $value;
}
0 голосов
/ 06 февраля 2011
function positiveInt($value, $maxValue = 0) {
    $value = (int) $value;
    return ( $value < $maxValue ) ? $maxValue : $value;
}

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

$start = positiveInt($_GET['s'], 5);
0 голосов
/ 06 февраля 2011

Использование троичного оператора может быть полезным. Не каждый считает троичные операции легко читаемыми. Полагаю, дело предпочтений.

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

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

Хотя это может потенциально показывать предупреждения (функция не обеспечивает существование $ _GET ['s']), поэтому я лично, вероятно, объявил бы мои ожидаемые переменные get в верхней части скрипта:

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

И так как функция невероятно похожа, я мог бы сделать все это в объявлении переменной вместо использования функции:

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

Так что я полагаю, это зависит от того, как вы планируете использовать этот метод в своем коде.

0 голосов
/ 06 февраля 2011
function myFunction($getparam, $equals){
  if(!is_int($getparam) || $getparam < $equals)
    return $equals
  return 'your actual return value';     
}

Это то, что вы собираетесь делать:)?

...