php=运算符

下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序

 例1:||与=

$a=0;
$b=0;
if($a=3||$b=3){
     $a++;
     $b++;
}
echo $a;//输出1
echo $b;//输出1
解释:

1,从上图可以看出逻辑运算符||的优先级高于赋值运算符=


2,在if条件判断时,实际是$a=(3||$b=3),括号里3为真,由于逻辑运算符||,只要前面的条件成立,后面不会进行运算,故而$b依旧等于0,不是3


3,$a=(3||$b=3),括号返回的是bool值,为true,由于递增递减不影响bool值。递减NULL也没有效果,但递增NULL的结果是1,故而$a++之后$a为1


4,由于$a=(3||$b=3)中$b=3赋值运算没有运行,故$b=0,$b++之后$b=1


5,$a为bool类型,var_dump($a),则是boolean true,echo $a,则是1

 

 例2:逻辑运算符||和&&,or和and

$a=0;
$b=0;
if($a=3 or $b=3){
     $a++;
     $b++;
}
echo $a;//输出4
echo $b;//输出1

  解释:

1,从上图可以看到赋值运算符=的优先级高于逻辑运算符or

2,在if条件判断时,实际是($a=3) or $b=3,此时先进行赋值运算$a=3,由于($a=3)为真,由于逻辑运算符or,前面的条件成立,后面不会进行运算,故而$b依旧等于0,不是3

3,$a等于3,$a++之后$a=4,$b=0,$b++之后$b=1

例4:++ 与 --

$a=1;
echo $a+++$a--;//输出3
echo $a;//输出1
 
$b=1;
echo $b--+$b++;//输出1
echo $b;//输出1
 
$c=1;
echo ++$c+$c++;//输出4
echo $c;//输出3

解释:

1,$a+++$a--,计算过程是先运行$a++,在运算时($a++)的值为1,$a++之后$a=2,然后运行$a--,此时$a=2,故($a--)的值为2,$a--运算之后$a=1,故运算结果是3,$a=1

2,$b--+$b++,计算过程先运行$b--,此时($b--)的值是1,$b--后$b=0,接着运行$b++,($b++)的值是0,$b++之后$b=1,故运算结果是1,$b=1

3,++$c+$c++,先运算(++$c),(++$c)的值为2,$c=2,接着运行($c++),此时$c=2,故而($c++)的值为2,运行完$c++之后$c=3,故而运算结果是3,$a=1

例5:$a++ 和++$a区别

1、++$a的用法

首先++$a等价于$a = $a + 1,比如$a初始值为1,那么$a = 1 + 1得出$a为2。

++$a执行过程:先将$a加1,假设结果为x,然后把x赋值给$a,所以$a的值等于x的值。

2、$a++的用法(以 x=a++ ,a=2 为例)

先将a值赋给变量 x(也就是 x=a ),然后 a 值加 1 (也就是 a = a + 1)

则最终x值等于2,a 值等于3,所以x = a++相当于 x = a , a = a + 1。

<?php
    $a = 1;
    $x = $a++;
    echo 'x='.$x.'<hr />';
    echo 'a='.$a.'<hr />';
    $b = ++$a;
    echo 'b='.$b.'<hr />';
    echo $x+$b;
?>

结果:x = 1,a = 2,b = 3,4。

总结
x = ++a相当于a++,x = a。
x = a++相当于x=a,a++。
++a与a++ 单独使用时,相当于 a = a + 1。
如果赋给一个新变量,则++a先将a值加1 ,而a++先将a赋给新变量。

原文地址:https://www.cnblogs.com/zh718594493/p/13715412.html