Я нахожу, что я сам делаю это предложение IF
. Например:
if($variable == 1 || $variable == "whatever" || $variable == '492') { ... }
За исключением выделенного времени, я сравниваю переменную $, возможно, 4-5 вещей, а иногда и больше. Есть ли короткий способ написать это? Вы можете видеть, что повторяющаяся $variable ==
будет избыточной.
Я хотел бы, чтобы это работало, но это не так:
if($variable == (1 || "whatever" || 492) { ... }
Вы можете использовать эту стенографию, но имейте в виду, что она менее эффективна, поскольку явным образом перечисляет их все или предложения:
if(in_array($variable, array(1, 'whatever', '492'))){ ... }
Также, если вы хотите использовать ===
вместо ==
эквивалент:
if(in_array($variable, array(1, 'whatever', '492'), TRUE)){ ... }
if(in_array($variable, array(1, "whatever", 492)))
in_array (…). http://php.net/manual/en/function.in-array.php
Хотя это прямо не отвечает на вопрос, я думаю, что стоит добавить этот метод как часть решения вышеупомянутой проблемы:
Если вы обнаружите, что что-то имеет несколько значений, вы можете найти что-то вроде следующего:
if (true === is_condition_one ( $variable )) { // Execute any condition_one logic here } function is_condition_one ( $variable = null ) { $arrKnownConditions = array ( // This can be an array from the database // An array from a file // An array from any other source // or an array of hardcoded values ); return in_array ( $variable, $arrKnownConditions ); }
Я согласен с Godwin и toon81 и PaulPRO, но чувствую, что, если вы делаете это много, вы можете воспользоваться рефактором как частью своего решения. Рефактор выше может помочь вам организовать этот проект, а другие лучше, определив цель сравнения и позволяя вашему коду быть более читаемым и абстрагировать от этих жестко заданных значений функцию. Это, вероятно, также поможет вам повторно использовать эту проверку в других частях вашего кода с большей уверенностью.
Еще одна жизнеспособная альтернатива – использовать регулярное выражение.
if (preg_match('^1|whatever|492$', $variable)) { ... }