Нет объективной метрики для элегантность .То, что один разработчик может найти элегантным, другой найдет многословным и повторяющимся.Что бы ни считалось лучшим для чего-то подобного, оно всегда будет полностью субъективным.
При этом, если вы обнаружите, что делаете что-то излишне повторяющееся и многословное снова и снова, обычно это запах, который может быть улучшен.
Возможные решения для вашего варианта использованиясильно варьироваться в зависимости от того, в каком направлении вы хотите идти.Вы можете создать объект параметра, который реализует ArrayAccess
, так что потребители могут по-прежнему рассматривать параметр как массив, но вы можете использовать его более кратко в своем методе.
Или выможет создать объект-конструктор с открытым интерфейсом, так что создание пользователя вообще не требует массива:
$user = UserBuilder::start()
->setName('Foo')
->setLastName('Bar')
->build();
Но все зависит от специфики вашей реализации, от дополнительной работы, которую вы желаетепройти через это относительное удобство и то, что конкретно вы хотите решить.
Очень распространенный и очень упрощенный шаблон при передаче ассоциативных массивов в качестве параметров, и вы хотите, чтобы некоторые гарантированные ключи были доступны;должен использовать array_merge()
.
Например:
function foo(array $arguments) {
$arguments = array_merge( [
'name' => null,
'lastName' => null,
'role' => ROLE_USER
],
$arguments);
}
Никакое количество магии не даст имя объекту User
, который его не получил, но таким образом, по крайней мере, задаются ключи массива, и вы можете использовать это для установки других значений по умолчанию перед началом работы с ними.
В конце вам придется решить, что работаетдля вас, что вы считаете элегантным, и какая реализация действительно стоит в вашем проекте.