Задать вопрос
stanislav-belichenko
@stanislav-belichenko
Backend PHP Developer

Как наиболее кратко и понятно передать в один аргумент функции одну из двух переменных, которые могут быть либо массивом, либо логическим выражением?

Всем привет. Возник интересный вопрос. Есть некая функция, в ней есть условно один аргумент:

function f($a) {
...
}

Вызов этой функции может происходить в нескольких местах кода, однако выбор переменной, которая передастся в аргумент данной функции, зависит только от самой переменой. При этом переменные могут быть либо массивом либо, например, объектом, либо принимать логическое значение. То есть, появляется несколько избыточный код:

// заранее известно, что одна из переменных будет массивом/объектом, а другая - true/false
if ($x) {f($x)}
else if ($y) {f($y)}

Однако хотелось бы увидеть что-либо вроде такого:

f($x || $y);

Но здесь происходит приведение к типам и в итоге мы получаем в теле функции в аргумент логическое значение, а именно true (оно там будет всегда, так как предыдущим кодом обеспечено, что одна из переменных массив/объект). Внимание, вопрос: возможна ли некая иная краткая запись, позволяющая так же красиво реализовать описываемое? Кроме использования краткой формы оператора "if else", естественно.

Пример для тестирования на phpfiddle.org.
  • Вопрос задан
  • 274 просмотра
Подписаться 1 Оценить Комментировать
Ответ пользователя Artem Gapchenko К ответам на вопрос (3)
artemgapchenko
@artemgapchenko
Возможно вы неправильно подходите к самой задаче. Я бы избавился вообще от функции, которая по понедельникам принимает boolean, по вторникам - массив, а по остальным дням недели - объект, так как эта функция берёт на себя слишком много ответственности, и перешёл бы вместо неё к трем разным функциям, первая из которых принимает в качестве аргумента boolean, вторая - массив, а третья - объект.
Код пишется не только для выполнения, но и для чтения другими разработчиками, и подобная функция явно не способствует скорости изучения кода и внесения в него изменений.
Ответ написан