boolean — Какой лучший способ в PHP назначить переменную в зависимости от двух независимых условий (-> четыре возможных значения)?

У меня есть переменная, которой нужно назначить одно из четырех возможных значений, в зависимости от двух условий.

В настоящее время я делаю это:

if (conditionsOne) {
$foo = (conditionTwo) ? 'one' : 'two';
} else {
$foo = (conditionTwo) ? 'three' : 'four';
}

Но это, ИМХО, немного вредит «золотому правилу» программирования, которое гласит «никогда не пиши один и тот же код дважды» (если кто-то изменится) conditionTwo и забывает поменять другой conditionTwo у нас есть ошибка).

Я также мог бы написать это как вложенную троичную форму, но это также требовало двухкратного условия и было бы менее читабельным.

Есть ли способ в PHP, чтобы сделать такое назначение без удвоения кода (так что нет проверки дважды для одного и того же условия) и без ущерба для читаемости?

1

Решение

Сохраните результат и используйте switch:

$s = 0;

if (conditionOne) {
$s += 1;
}
if ($conditionTwo) {
$s += 10;
}

switch ($s) {
case 0: $foo = 'four'; break;
case 1: $foo = 'two'; break;
case 10: $foo = 'three'; break;
case 11: $foo = 'one'; break;
}
1

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

это должно работать …

$values=array(array(“four”,”three”),array(“two”,”one”));
$foo=$values[$conditionsOne][$conditionsTwo];
0

Я не знаю, будет ли этот способ лучше, но вы можете сделать функцию и использовать «return» для
оптимизировать сравнения:

function cond( $conditionsOne, $conditionsTwo )
{
if( $conditionsOne && !$conditionsTwo ) return 'one';
if( $conditionsOne ) return 'two';
if( $conditionsTwo ) return 'three';
return 'four';
}

$foo = cond( $conditionsOne, $conditionsTwo );
0