выдает ошибку, если число отличается от 1 или 0

#php

#php

Вопрос:

 <?php
$gender = 0;
if (($gender != 0) || ($gender != 1))
{
    die('error:Must select a gender.');
}
?>
 

Это должно выдать ошибку, если пол отличается от 1 или 0 . Так что, если я дал 5 , оно должно умереть. Если бы я его дал 1 , оно не должно умереть. Если я дам его 0 , оно не должно умереть.

Я думал о нескольких обходных путях

 <?php
$gender = 0;
if ($gender == 0)
{
//number is okay
}
else if ($gender == 1)
{
//number is okay
}
else
{
die('error:Must select a gender.');
}
?>
 

Ну, это выглядит неаккуратно, и это сработало бы, или я мог бы создать массив с 0 и 1 и проверить, есть ли в нем или нет. Я думаю, это перебор.

Не уверен, что я делаю неправильно.

Комментарии:

1. Если вы можете сделать gender целым числом без знака, вы можете просто проверить, является ли($gender > 1){die(‘etc.’);}

Ответ №1:

Вы используете неправильный логический оператор:

  if (($gender != 0) || ($gender != 1)) {
 }
 

Это будет введено, если пол также равен 0, потому что он не равен 1, и наоборот. Что вам нужно сделать, это:

  if (($gender != 0) amp;amp; ($gender != 1)) {
 }
 

Посмотрите на эту таблицу:

 gender  A (gender != 0)    B (gender != 1)     A || B     A amp;amp; B
----------------------------------------------------------------
0       false              true                true       false
1       true               false               true       false
5       true               true                true       true
 

Также обратите внимание на предложение Джошуа в комментариях:

 if (($gender == 0) || ($gender == 1)) {
    /* number is ok */
} else {
    die();
}
 

это немного длиннее, но более читабельно.

Комментарии:

1. Выполнение if (($gender == 0) || ($gender == 1)) { /* number is ok */ } else { die(); } также будет работать.

2. @Joshua: Да, и это более читабельно. Я отредактировал и предложил это.

3. Спасибо. Я понял это! Я чувствую себя немного глупо, но теперь понимаю. Будет известно позже. Все еще учусь, самостоятельно.

4. Булева алгебра может быть трудной для понимания в начале, поэтому не нужно чувствовать себя глупо 🙂

Ответ №2:

 if (($gender != 0) amp;amp; ($gender != 1))
                   ^^
 

Вы хотите умереть, если оба теста верны.

Ответ №3:

Измените or ( || ) на and ( amp;amp; ), и это должно сработать, так как вы хотите потерпеть неудачу только тогда, когда это не 0 так и не 1 так.