Я получаю неверный результат для всех возрастов старше 5. Я не могу использовать операторы switch

#php #if-statement

#php #if-statement

Вопрос:

Это рассматриваемый код. Мне кажется, что это правильно, но для всех возрастов старше 5 он выводит «Вы можете пойти в дошкольное учреждение»

 <?php

$age = 13;

if ($age < 3) {
    echo "You are too young for school";
} elseif ($age = 3 or $age = 4) {
    echo "You can go to preschool";
} elseif ($age >= 5 and $age < 12) {
    echo "You can go to primary school";
} elseif ($age >= 12 and $age < 18) {
    echo "You can go to high school";
} else {
    echo "You do not have to go to school";
}

?>
 

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

1. Опечатка: elseif ($age = 3 or $age = 4) вам нужно использовать == для сравнения, а не = .

2. Кстати, вам не нужны нижние границы в ваших сравнениях, поскольку предыдущие if утверждения уже гарантируют, что вы, по крайней мере, там.

3. = для назначения == и === для сравнения.

Ответ №1:

Вам нужно «==» для сравнения (только значения) $var == $var2 или используйте «===» для более строгого сравнения (тип и значение).

Разница в этом

 <?php
$var = 1;
$var2 = "1;

echo $var == $var2; //Return 1 (true). Value comparation.
echo $var === $var2; //Return 0 (false). Value and type comparation [int not equal string, but still being 1 == "1"]
 

Поэтому ваш код должен быть таким (если возраст когда-либо будет int, иначе используйте «==»):

 <?php

$age = 13;

if ($age < 3) {
    echo "You are too young for school";
} elseif ($age === 3 or $age === 4) {
    echo "You can go to preschool";
} elseif ($age >= 5 and $age < 12) {
    echo "You can go to primary school";
} elseif ($age >= 12 and $age < 18) {
    echo "You can go to high school";
} else {
    echo "You do not have to go to school";
}

?>
 

Разница между оператором looely == equal и оператором strict === identic точно объяснена в руководстве по PHP.