У меня есть несколько функций, которые манипулируют данными в массиве, например unset_data()
вы передаете ему значение и неограниченное количество строковых аргументов, таких как:
unset_data( $my_array, "firstname", "password" );
и он может обрабатывать многомерные массивы и т. д., довольно просто.
Но должна ли эта функция использовать ссылку на массив и изменить ее напрямую?
Или я должен вернуть новый массив со значениями unset.
Я никогда не могу решить, должна ли функция использовать ссылку или нет,
Есть, например, конкретные случаи или примеры, когда и когда не использовать их?
благодаря
Я спрашивал себя, каков ожидаемый вариант использования функции. Используется ли типичный пример использования для сохранения исходных данных и получения от него новых данных или явного использования этой функции для изменения данных?
Скажем, md5
данные на месте, что будет довольно неудобно, так как я обычно хочу сохранить исходные данные целыми. Поэтому я всегда должен был это сделать:
$hash = $data; md5($hash);
вместо:
$hash = md5($data);
Это довольно уродливый код, навязанный вам API функции.
Тем не менее, я не думаю, что типичный пример использования заключается в получении новых данных:
$arr = unset($arr['foo']);
Это кажется довольно неуклюжим, а также, возможно, хитом производительности.
Вообще говоря, лучше возвращать значение вместо того, чтобы брать ссылку, потому что:
array_filter(unset_data(...))
В большинстве случаев эти преимущества приносят за счет использования дополнительной памяти. Если у вас нет веских оснований (или, еще лучше, доказательств), чтобы полагать, что потребление дополнительной памяти будет проблемой, мой совет – просто вернуть измененное значение.
Я чувствую, что нет общего, что вы должны / не должны отвечать на этот вопрос – это полностью зависит от случая использования.
Мое личное чувство склоняется к прохождению по ссылке, чтобы сохранить его поведение в соответствии с родным unset()
, но если вы, скорее всего, будете регулярно делать копии массива до того, как вы вызовете функцию, затем перейдите к возвращаемое значение. Еще одно преимущество ссылочного подхода состоит в том, что вы можете вернуть некоторую другую информацию, а также добиться модификации массива – например, вы можете вернуть целое число, описывающее, сколько значений было удалено из массива на основе аргументов.
Я не думаю, что есть твердый аргумент для «лучшей практики» с любым вариантом здесь, поэтому короткий ответ будет следующим:
Сделайте то, что вам больше всего нравится, и что позволяет писать наиболее сжатый, читаемый и самодокументирующий код.