У меня есть переменная, которой нужно назначить одно из четырех возможных значений, в зависимости от двух условий.
В настоящее время я делаю это:
if (conditionsOne) {
$foo = (conditionTwo) ? 'one' : 'two';
} else {
$foo = (conditionTwo) ? 'three' : 'four';
}
Но это, ИМХО, немного вредит «золотому правилу» программирования, которое гласит «никогда не пиши один и тот же код дважды» (если кто-то изменится) conditionTwo
и забывает поменять другой conditionTwo
у нас есть ошибка).
Я также мог бы написать это как вложенную троичную форму, но это также требовало двухкратного условия и было бы менее читабельным.
Есть ли способ в PHP, чтобы сделать такое назначение без удвоения кода (так что нет проверки дважды для одного и того же условия) и без ущерба для читаемости?
Сохраните результат и используйте 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;
}
это должно работать …
$values=array(array(“four”,”three”),array(“two”,”one”));
$foo=$values[$conditionsOne][$conditionsTwo];
Я не знаю, будет ли этот способ лучше, но вы можете сделать функцию и использовать «return» для
оптимизировать сравнения:
function cond( $conditionsOne, $conditionsTwo )
{
if( $conditionsOne && !$conditionsTwo ) return 'one';
if( $conditionsOne ) return 'two';
if( $conditionsTwo ) return 'three';
return 'four';
}
$foo = cond( $conditionsOne, $conditionsTwo );