2015-09-15 2 views
0

Речь идет о удобочитаемости кода:Лучший подход к передаче параметров функции?

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

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

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

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

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

$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

Использовать первый подход с помощью phpdoc (документация к вашим методам и переменным), и вам хорошо идти - ваша IDE расскажет вам, что вам нужно знать –

ответ

1

А что-то вроде этого:

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

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

+0

Мне это нравится, на самом деле я использовал его несколько раз. Я думаю, что это хороший подход, но когда я его использую, я спрашиваю себя: «Где линия между прохождением параметров по отдельности или массив, содержащий все из них? Передача только одного int оправдывает использование массива, чтобы его содержать? Если нет, передача также строки делает?». Кроме того, вы теряете функциональность значений параметров по умолчанию. – Didhack

0

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

Кроме того, эта практика

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

Нехорошо из-за так называемого "magic numbers and strings". Если вы найдете такие вещи, экспортируйте их в константу или в какую-либо конфигурацию.

Смежные вопросы