Я знаю, что это странный вопрос, но у меня есть статический метод, объявленный так:
public static function getCountForTypesByModificationYear($year, $filter = null) {
$filter["modification year"] = $year;
return self::getCountForTypes($filter);
}
Он принимает аргумент (год) и, необязательно, ассоциативный массив с дополнительными параметрами фильтрации. Первая строка обеспечивает $filter
массив имеет только один modification year
ключ (который я предоставляю в качестве первого аргумента), а второй запускает метод с SQL-запросом для подсчета потенциальных результатов для выбранных фильтров.
Они довольно понятны и просты для моих целей, но я пытаюсь угадать, есть ли способ превратить эти две строки в одну строку БЕЗ прибегая к таким функциям, как array_merge_recursive()
или же call_user_func()
,
Можно ли это уменьшить?
Если все, что вас волнует, это сделать это в одну строку, вы можете попробовать следующее:
public static function getCountForTypesByModificationYear($year, $filter = null) {
return self::getCountForTypes(($filter["modification year"] = $year) ? $filter : null);
}
Тем не менее, я не уверен, что его производительность будет лучше.
В качестве альтернативы вы также можете сделать,
return self::getCountForTypes(["modification year" => $year] + $filter);
Вы можете сделать это только с помощью некоторого вызова функции, например функции array_merge.
Выражение как ($filter['xx']=123)
вернуть значение правого операнда
public static function getCountForTypesByModificationYear($year, $filter = null)
{
return self::getCountForTypes(array_merge($filter,["modification_yer"=> $year]));
}
Также в вашем примере, если вы не используете type-hint ‘array’ и установите $filter
значение по умолчанию нуль — вы должны убедиться, что $filter
это массив
public static function getCountForTypesByModificationYear($year, $filter = null)
{
if( !is_array($filter) ) throw new \InvalidArgumentException();
return self::getCountForTypes(array_merge($filter,["modification_yer"=> $year]));
}