передать аргумент и предварительно преобразовать его в одну строку?

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

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(),

Можно ли это уменьшить?

0

Решение

Если все, что вас волнует, это сделать это в одну строку, вы можете попробовать следующее:

public static function getCountForTypesByModificationYear($year, $filter = null) {
return self::getCountForTypes(($filter["modification year"] = $year) ? $filter : null);
}

Тем не менее, я не уверен, что его производительность будет лучше.

В качестве альтернативы вы также можете сделать,

return self::getCountForTypes(["modification year" => $year] + $filter);
1

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

Вы можете сделать это только с помощью некоторого вызова функции, например функции 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]));
}
1

По вопросам рекламы [email protected]