Я работаю над правдой / ложью, где мне нужно проверить 2 значения, одно из которых может быть нулевым, а другое 0. Если целое и строковое значение одинаковые, они будут одинаковыми.
Самое простое, что мне удалось сломать, это:
if($var1 == $var2) {// They may be the same
if((isset($var1) && !isset($var2)) || (!isset($var1) && isset($var2))) { // Is one set, and not the other?
return true; // As different as we'll allow
}
return false; // Nope they're the same
}
return true; // Definitely different
Мой вопрос будет в основном, учитывая приведенный выше блок кода, есть ли более простой способ проверить, установлено ли одно значение, а не другое?
РЕДАКТИРОВАТЬ: Причина, по которой я проверяю равенство в первую очередь, в том, что значение может пройти 1 == 10 или 10 == ’10’, в этом случае мне не нужно проверять дальше, но если ноль == 0, это будет пройти и требовать дальнейшей проверки. Я видел, что могу передать несколько значений в isset, что сработало бы, если бы мне потребовалось установить оба или оба не установить, но если одно, а не другое, это то место, где мне нужно пометить.
Вы проверяете на равенство до проверка, если они установлены.
Я бы рекомендовал проверить, если они установлены в первую очередь.
Если цель PURE состоит в том, чтобы проверить, установлен ли один, а не другой, то:
return ( ( empty($var1) && ! empty($var2) ) || ( ! empty($var1) && empty($var2) );
По комментариям, isset
это требование, поэтому эта версия:
return ( ( isset($var1) && ! isset($var2) ) || ( ! isset($var1) && isset($var2) );
И, перейдите к @deceze, чтобы предложить еще более простую версию:
return ( isset($var1) != isset($var2) );
Использование оператора объединения нулей может пригодиться …
return ($var1 ?? null) !== ($var2 ?? null);
Проверяет, что они не равны и хотя бы один определен и не равен нулю.