Я хочу сравнить одну и ту же переменную (или выражение) со многими различными значениями и вернуть другое значение в зависимости от того, какому значению оно равно. я хочу сделать это встроенный или сокращенный, как это возможно с if
заявление.
Возьмите следующее switch
заявление:
switch($color_name) {
case 'red':
case 'blue':
$color_type = handlePrimaryColor($in);
break;
case 'yellow':
case 'cyan':
$color_type = handleSecondaryColor($in);
break;
case 'azure':
case 'violet':
$color_type = handleTertiaryColor($in);
break;
default:
$color_type = null;
break;
}
Я не люблю писать $color_type =
в каждом случае и хотел бы найти способ сделать это с меньшим количеством кода.
Я мог бы сделать это с помощью некоторой формы сокращенного синтаксиса. Ниже я использую стенография if
заявление назначить значение переменной в том же месте, где оно было впервые объявлено:
$color_type = $color_name == 'red' || $color_name == 'blue'
? handlePrimaryColor($color_name)
: ($color_name == 'yellow' || $color_name == 'cyan'
? handleSecondaryColor($color_name)
: ($color_name == 'azure' || $color_name == 'violet'
? handleTertiaryColor($color_name)
: null
)
);
Этот метод не требует объявления переменной внутри каждой конструкции, но вместо этого дает мне 2 новые проблемы:
OR
условие для каждого цветаМой вопрос: есть ли метод, который позволяет мне напрямую присваивать значение переменной, используя сокращенный синтаксис, который ведет себя как переключатель?
Если нет, мне было бы интересно узнать, почему существует такое ограничение.
Слишком много работы. Используйте таблицу отправки.
$color_dispatch = Array(
'red' => 'handlePrimaryColor',
'blue' => 'handlePrimaryColor',
...
);
$color_type = null;
if (array_key_exists($color_name, $color_dispatch))
{
$color_type = $color_dispatch[$color_name]($in);
}
Других решений пока нет …