Понимание способа чтения операторов PHP в PHP - PullRequest
0 голосов
/ 23 августа 2009

Как PHP читает операторы if?

У меня есть следующие операторы if в этом порядке

if ( $number_of_figures_in_email < 6) {
       -- cut: gives false
}


if($number_of_emails > 0) {                                                                         
      -- cut: gives false
} 

if ( $number_of_emails == 0) {
   -- cut: gives true
}

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

Это говорит о том, что я не могу кодировать только с помощью операторов if.

Ответы [ 2 ]

6 голосов
/ 23 августа 2009

Он не "ведет себя случайным образом", он делает то, что вам говорят:

if ($a) {
    // do A
}

if ($b) {
    // do B
}

if ($c) {
    // do C
}

Все три ifs не зависят друг от друга. Если $a, $b и $c - все true, он будет выполнять операции A, B и C. Если только $a и $c - истина, он будет выполнять операции A и C и т.д. на.

Если вы ищете более «взаимозависимые» условия, используйте if..else или вложенный ifs:

if ($a) {
    // do A and nothing else
} else if ($b) {
    // do B and nothing else (if $a was false)
} else if ($c) {
    // do C and nothing else (if $a and $b were false)
} else {
    // do D and nothing else (if $a, $b and $c were false)
}

В приведенном выше примере будет выполнено только одно действие.

if ($a) {
    // do A and stop
} else {
    // $a was false
    if ($b) {
        // do B
    }
    if ($c) {
        // do C
    }
}

В вышеприведенном случае и B, и C могут быть выполнены, но только если $a ложно.

Кстати, это довольно универсально и совсем не специфично для PHP.

5 голосов
/ 23 августа 2009

Если вы хотите вернуть только один из результатов из множества различных операторов if, используйте elseif, например:

if ( $number_of_figures_in_email < 6) {
       -- cut: gives false
}
elseif($number_of_emails > 0) {                                                                         
      -- cut: gives false
} 
elseif ( $number_of_emails == 0) {
   -- cut: gives true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...