2015-02-02 2 views
-1

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

Какая лучшая практика кодирования? Благодаря!

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.

+0

Это зависит, но если вы когда-либо называете 'B', тогда вам нужно хотя бы сделать это. – AbraCadaver

+0

Почему бы не дезинфицировать его вне функций? – Ananth

+0

Трудно ответить конкретно, не зная ничего о том, что делают эти функции. Этот вопрос имел бы гораздо больший смысл, был ли он менее общим. – CBroe

ответ

0

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

вы также можете использовать тип намекая:. PHP: Type Hinting

0

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

По возможности вы должны использовать type hinting - одно из преимуществ этого заключается в том, что современные 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

спасибо за ваше предложение ... где бы вы предложили эту функцию санитизации помещается? внутри A или B, или за пределами обоих? – tonytz

+0

«в отдельной, возможно, частной области, функция» - вызовите функцию C, если вы это сделаете! – kguest

+0

Извините, я имел в виду ... где бы вы назвали эту функцию санитарии? – tonytz