Плохо ли в функции передавать многомерные массивы?

Скрипт для выполнения различного функционала "генерирует" многомерный массив, большой вложенности (до 50 элементов суммарно). Затем этот массив отправляется в функцию в качестве аргумента. Проблема в том, что в функции используются далеко не все переменные (обычно не более 5). Но удобство в том, что мы по сути один и тот же массив передаем в разные функции, и они берут то, что им надо. Не будет ли считаться нагрузкой это "гуляние" многомерного массива по функциям? По сути это ведь занятая память
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
Immortal_pony
@Immortal_pony Куратор тега PHP
50 элементов - это мелочи, ничего с вашей памятью не случится.

Но удобство в том, что мы по сути один и тот же массив передаем в разные функции, и они берут то, что им надо

А вот это удобство сомнительное, потому что вместо "чистого" принятия аргументов, которым можно задать тип и значение по умолчанию вы получаете "грязное" выковыривание данных из большого массива, да еще и вынуждены валидировать типы и проставлять значения по-умолчанию вручную. На мой взгляд выгода так себе.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@oleg_ods
Как вариант сделать этот массив неким подобием конфига, а функциям передавать только его элементы.

Но скорее всего Вам лучше пересмотреть логику приложения.
Ответ написан
Комментировать
@Vitsliputsli
""грязное" выковыривание данных", "невнятный клубок данных"

А если бы вы написали что передаете объект в метод, а в этом методе используется только 10% свойств переданного объекта, вам бы написали, что это абсолютно нормально. Хотя по-сути это тоже самое.
Имхо, если здесь проблема и есть, то не в самом способе, а в данных, которые передаете. Если это логически связанные данные, то вполне нормально. Если это разрозненные данные, например конфигурация, то лучше пусть разбором будет заниматься отдельная процедура.
50 элементов это, конечно, мелочи, но если все-равно не хочется постоянно делать новые копии, передавайте по ссылке.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы