Для двух функций (одна используется внутри другой) с одним и тем же входным аргументом, где очистить входной аргумент?

Для двух функций ниже функция A использует функцию B, и они принимают один и тот же аргумент — $ input. Должен ли этот входной аргумент $ санироваться в пределах А или В? Или это должно быть продезинфицировано в обоих? (Лишнее?)

Какова лучшая практика кодирования? Спасибо!

function A($input) {

// Sanitize $input here?

B($input);

// Does its own thing

}

function B($input) {

// Sanitize $input here?

// eg. SQL statement using the $input
eg. "SELECT * FROM table1 WHERE column1 = $input"
}

Изменить: я сделал это немного более конкретным, чтобы вы знали, что делает функция B. (допустим, например, что он использует $ input как часть оператора SQL.

-1

Решение

Зависит от ввода и того, что вы хотите дезинфицировать. Если вы хотите продезинфицировать его в обеих функциях, тогда, по крайней мере, для дезинфекции используется третья функция. Так что он обрабатывается одинаково, и когда вам нужно изменить его, вы должны изменить его в одной точке.

Вы также можете использовать тип подсказки: PHP: Тип Хинтинг

0

Другие решения

Очистите входные данные в отдельной, возможно, закрытой, функции, вызывая ее в начале других функций, которые ее вызывают. Это позволит обеспечить согласованность, а также рефакторинг санации для этой отдельной функции снизит уровень требуемой работы, если вам потребуется добавить дополнительные функции, которые также могут потребовать санации ввода того же типа / диапазона.

Где возможно, вы должны использовать тип подсказки — Одно из преимуществ заключается в том, что современные IDE будут использовать это для всплывающих подсказок при вводе кода, который вызывает эти функции.

Кроме того, как часть санации / проверки входных значений, я бы рекомендовал бросать подклассы исключений времени выполнения, чтобы указать ошибки проверки на этом входе, например:

class My_RuntimeException extends RuntimeException {}

function A($input) {
$s = sanitise_input($input);
// do main work...
}
function B($input) {
$s = sanitise_input($input);
// do main work of this function...
}

function sanitise_input($input) {
if (!is_numeric($input)) {
throw new My_RuntimeException("$input must be numeric.");
}
if ($input < MIN_RANGE && $input > MAX_RANGE) {
throw new My_RuntimeException("$input outside of range.");
}
$sanitised = (int) $input;
return $sanitised;
}

Таким образом, вы не полагаетесь на загадочные возвращаемые значения, чтобы указать, что может быть не так с входными значениями, и вы можете вернуть действительный очищенный входной параметр.

0

По вопросам рекламы [email protected]