Лучший подход для передачи параметров в функцию?

Это о читабельности кода:

Я давно этим занимаюсь, и мне всегда интересно, как лучше подходить к передаче параметров.

Много раз, читая код от других программистов, я нахожу такие строки:

$Instance->functionCall('Abc123', 5, 1.24, 'XYZ', 642);

Это заставляет меня пойти в файл Class и посмотреть, что означают эти параметры.

Я делаю все возможное, чтобы написать читаемый код, выполнив это:

$user_name = 'Abc123';
$age = 5;
$height = 1.24;
$hobbies = 'XYZ';
$num_brothers = 642;

$Instance->functionCall($user_name, $age, $height, $hobbies, $num_brothers);

Или это:

$Instance->functionCall($user_name = 'Abc123', $age = 5, $height = 1.24, $hobbies = 'XYZ', $num_brothers = 642);

Но эти переменные занимают память, больше нигде не используются.
Мне нравится думать, что это «потерянное» пространство памяти стоит того, чтобы быть более читабельным, но я хотел бы знать, есть ли лучший способ.

Есть идеи?

Спасибо всем!

0

Решение

Как насчет чего-то вроде этого:

$Instance->functionCall([         // or $Instance->functionCall( array(
'user_name'    => 'Abc123',
'age'          => 5,
'height'       => 1.24,
'hobbies'      => 'XYZ',
'num_brothers' => 642
]);

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

1

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

Прежде всего функции могут иметь много параметров только в крайних случаях, но обычно, если их много — рефакторинг. В данном случае похоже, что должен быть какой-то объект User, который должен быть передан только в функцию, и вы можете получить все необходимые данные из этого объекта внутри функции. А также используйте PHPDoc, поскольку @m_pro_m сказал, что ваша IDE скажет вам, что вам нужно.

Также эта практика

$Instance->functionCall('Abc123', 5, 1.24, 'XYZ', 642);

Это плохо из-за так называемогомагические числа и строкиMsgstr «Если вы найдете такие вещи, экспортируйте их в константу или какой-нибудь конфиг.

0