逻辑运算符短路作用

短路运算:如果参与逻辑运算的表达式,第一个式子就能决定整个逻辑表达式的结果,那么就不会去算第二个式子的值,这个就是短路运算。

一、短路与:有假必假,全真为真

  1. 判断方式:从左到右依次判断,直到出现false为止将不再判断,直接得到结果为false(短路遇false就停)
  2. 例子
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    $a = 3;
    $b = 3;
    $a = 5 && $b++;
    var_dump($a, $b);// bool(true) int(4)

    $a = 3;
    $b = 0;
    $a = 5 && $b++;
    var_dump($a, $b);// bool(false) int(1)

    $a = 3;
    $b = 3;
    $a && $b++;
    var_dump($a, $b);// int(3) int(4)


    $a = 0;
    $b = 1;
    var_dump($a && $b++);// bool(false)
    var_dump($a, $b);// int(1) int(1)【发生短路】

    $a = 1;
    $b = 0;
    var_dump($a && $b++);// bool(false)
    var_dump($a, $b);// int(1) int(1)

    $a = 1;
    $b = 0;
    var_dump($a && ++$b);// bool(true)
    var_dump($a, $b);// int(1) int(1)

二、短路或:有真必真,全假为假

  1. 判断方式:从左到右依次判断,直到出现true为止将不再判断,直接得到结果为true
  2. 例子

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    $a = 3;
    $b = 3;
    $a = 5 || $b++;
    var_dump($a, $b);// bool(true) int(3)【发生短路】

    $a = 0;
    $b = 1;
    $a || $b++;
    var_dump($a, $b);

    $a = 0;
    $b = 1;
    $a = 1 || $b++;
    var_dump($a, $b);// bool(true) int(1)【发生短路】

    $a = 0;
    $b = 1;
    $a = 0 || $b++;
    var_dump($a, $b);// bool(true) int(2)

    $a = 0;
    $b = 0;
    $a = 0 || $b++;
    var_dump($a, $b);// bool(false) int(1)

    $a = 0;
    $b = 0;
    $a = 1 || $b++;
    var_dump($a, $b);// bool(true) int(0)【发生短路】

    $a = 1;
    $b = 0;
    $a || $b++;
    var_dump($a, $b);// int(1) int(0)【发生短路】

注:赋值运算符=优先级高于逻辑运算符 and or