OR, возвращающий неправильный номер

Если я поставлю 1 или 2 в это, он вернется 4. Почему это? Я больше привык к материалам python, так что извините, если это довольно просто.

e = 1; f=0; if(e==1){f=1;} if(e==2){f=2;} if(e== 3 or 4){f=4;} echo f; 

Попробуйте заменить:

 if(e== 3 or 4){f=4;} 

с

 if(e == 3 or e == 4){ f=4; } 

Значение 4 считается TRUE по языку. В вашем коде 1 == 3 FALSE , поэтому оператор if смотрит (FALSE or TRUE) равный TRUE , поэтому f установлен в 4.

Посмотрите на эту ссылку re: PHP Booleans

Для вашего or заявления это то, что вы хотите:

 if ( ($e == 3) || ($e == 4) ) { $f=4; } 

Следующее утверждение всегда будет верно

 if(e== 3 or 4) 

Если вы посмотрите на boolean , вы увидите, что почти все равно true в php ( за исключением тех значений, которые указаны на той же странице ). Так что у вас действительно есть что-то вроде этого:

 if($e==3 or true) 

И поскольку anything or true всегда true , вы получаете тот (странный, но не неожиданный) результат.


Если вы хотите проверить, равна ли $e равным 3 или 4 , сделайте это так:

 if($e==3 || $e==4){ 

Обратите внимание, что, поскольку это не так, if..else , все условия проверяются. Взгляните на расширенную версию:

 if($e==1){ $f=1; } if($e==2){ $f=2; } if($e==3 or 4){ $f=4; } 

Это / \ отличается от

 if($e==1){ $f=1; }elseif($e==2){ $f=2; }elseif($e==3 or 4){ $f=4; } 

Поскольку последний проверяет каждое условие в случае, если ни один из предыдущих не подходит.


Другая сторона примечания. Так как вам нравится python, этот код можно преобразовать в эту единственную строку:

 $f = ($e==3 || $e==4) ? 4 : $e;