Я придерживаюсь этого правила:
Если
- , то есть более 5 аргументов
- логический порядок аргументов отсутствует
- нет четкой логической зависимости между аргументами
и / или - , большинство аргументов являются необязательными
Тогда это , вероятно, aхорошая идея использовать массив для имитации аргументов ключевых слов.В противном случае просто используйте стандартные аргументы.
Также рассмотрите возможность использования объекта параметра для выполнения сложных вызовов методов.
РЕДАКТИРОВАТЬ: Что бы яделать с этим?
public static function search(
$keywords,
$limit = NULL,
$offset = NULL,
Model_Post_Type $type = NULL,
Model_Category $category = NULL
)
Что ж, с массивом параметров (также известным как аргументы ключевых слов в языках, которые их поддерживают, например, Python), я бы предпочел сделать следующее:
public static function search($keywords, $options = array()) {
$default_options = array(
'limit' => NULL,
'offset' => NULL,
'post_type' => NULL,
'category' => NULL
);
extract(array_merge($default_options,$options));
// search logic, using $keywords, $limit, $offset, $post_type, $category
}
Это дает вам несколько преимуществ:
- Все, что в
$options
, совершенно необязательно.Любые обязательные аргументы должны быть аргументами. - Предоставляет полный контроль над настройками по умолчанию для этих параметров, даже учитывая сложные выражения в инициализаторе массива.
- Позволяет добавлять новые (необязательные) параметры поискапозже, оставаясь обратно совместимым с существующим кодом.
extract()
превращает пары ключ-значение в пары переменная-значение, поэтому остальная часть метода полностью игнорирует тот факт, что вы используете параметрмассив и ненормальные аргументы.