Вам не нужен троичный, если вы собираетесь вернуть true
или false
. Цитирование руководства:
Выражение (expr1) ? (expr2) : (expr3)
оценивается как expr2, если expr1 оценивается как TRUE, и expr3, если expr1 оценивается как FALSE.
Это значит
$res = (($rule1 == true) && ($rule2 == false) && ($rule3 == true));
уже присвоит true или false. Кроме того, если вас не волнует, что $ rule - логическое значение, вам не нужно сравнивать с ==
. Вам также не нужны скобки, например,
$res = $rule1 && !$rule2 && $rule3;
совпадает с вашей начальной троичной.
Хорошая практика, когда у вас есть несколько таких выражений, это скрывать фактическое сравнение за значимым именем метода или функции, например,
function conditionsMet($rule1, $rule2, $rule3) {
return $rule1 && !$rule2 && $rule3;
}
и тогда вы можете сделать
if (conditionsMet($rule1, $rule2, $rule3)) {
// do something
}
Конечно, conditionsMet
не , что значимо. Лучшим примером будет что-то вроде isSummerTime
или isEligibleForDiscount
и так далее. Просто укажите, что правила выражают в имени метода.
Вас также может заинтересовать Упрощение условных выражений из книги Рефакторинг - Улучшение дизайна существующего кода .