массивы — Как обрабатывать шаблон проверки типа в Stack Overflow

Я пишу служебную функцию для обработки массивов. Во избежание сложности предположим, что это простой дескриптор, позволяющий вставлять сокращенные массивы в функцию:

function array_insert($original_arr,$key,$val){
$original_arr[$key]=$val;
return $original_arr;
}

С использованием варианта использования, например

validate_input(array_insert($_GET,'extra-key','val'));

Теперь скажем, у нас может быть проблема, которая $_GET может не быть массивом. Или, скажем, мы принимаем данные от внешнего звонка; где лежит ответственность за проверку того, что первый параметр является массивом?

Если это сформировало начало сложного стека обработки, мы могли бы сделать:

if (is_array($our_data)){
do_something($our_data);
do_something_else(array_insert($our_data,'key','val'));
}

Это не дает возможности сообщить области вызова, что do_something не случилось, хотя Итак, мы могли бы сделать:

if (!is_array($our_data)){
throw new Exception('not an array');
}

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

Мы могли бы просто выйти из функции полезности и вернуть false, что-то еще может проверить:

function array_insert($original_arr,$key,$val){
if (!is_array($our_data)){
return []; // which is empty but expected, or return false.. or null...
}
}

Тогда есть самый низкий уровень:

function array_insert(Array $original_arr)

Что вызовет исключение уровня PHP, если массив не передан.

Так что вопрос в том; для функции полезности, какую ответственность мы берем на себя в случае использования? Вызываем ли мы исключение языка с помощью TypeHint, мы молча терпим неудачу, не пытаемся ли мы проверить и позволить конечному пользователю это выяснить?

Обновить

Во-первых, люди отмечают, что это субъективно — я согласен, хотя, вероятно, будет признанная лучшая практика, например, один рекомендован схемами сертификации или крупными компаниями в мире PHP.

Во-вторых, еще один вопрос (вызванный первым ответом) заключается в том, существует ли установленный класс исключения / имя класса для такого рода проблемы?

1

Решение

Как уже упоминалось в комментариях, это абсолютно субъективно, но лично:

  • я всегда используйте подсказки типа для объектов и массивов.

  • Для функций, работающих на примитивных типах, я бросаю InvalidArgumentException основанный на значении, только если некоторые значения недопустимы, и это может быть неочевидно.
    Например, функция, вычисляющая квадратный корень числа, может выдать исключение при передаче отрицательного значения.

  • Во всех других случаях я использую осмысленные имена функций / параметров и предполагаю, что если кто-то решит, что это хорошая идея — передать нечисловую строку или массив в функцию, определенную как
    doStuffWithNumbers($num1, $num2)Это его ответственность, если в результате случится что-то плохое.

1

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

Других решений пока нет …

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