4)比较运算符
== 值是否相等
如果值相等则是true,不相等就是 false
$a=10;
$b=10;
var_dump($a==$b); //true
=== 全等(值要相等,类型也要相等)
$a=11;
$b='11';
var_dump($a==$b); //true, php里'11'会被强制类型转换成int 11
var_dump($a===$b); //false
!= 值是否不相等
如果两边操作数的值不相等结果是true,否则就是false
<> 值是否不相等,和上面!=用法相同
!== 不全等
$a=11;
$b='11';
var_dump($a!=$b); //false
var_dump($a!==$b); //true
<、>、<=、>=
注:一般不用echo输出的原因是输出的值是布尔类型,看不出变量的具体类型
5)逻辑运算符
参与逻辑运算的表达式是布尔类型的值,如果不是布尔类型的值会被自动转换成布尔类型的值,然后再参与运算
逻辑与:&&
左右表达式两边的结果都是true的时候结果为true,否则只要其中一个为false,运算的结果就是false
$a=true;
$b=false;
var_dump($a && $b); //false
注:以下的值被认为是false,其他的值都被认为true
布尔值false、0、浮点型0.0、空白字符串和字符串0、没有成员的数组、NULL
逻辑或:||
左右两边的表达式有一个是true,那么结果就是true
逻辑异或:xor
左右两边表达式的值不一样的时候结果就是true,反正为false
$a=false;
$b=true;
var_dump($a xor $b); //true
逻辑非:!
$a=true;
var_dump(!$a); //false
6)位运算符(不怎么用)
7)其他运算符:
三元运算 表达式1 ? 表达式2 :表达式3
如果表达式1的值为true,那么执行表达式2,否则就执行表达式3
$a=false ? 10 : 20;
echo $a; //20
系统命令执行符(设计跨平台):``
$a=`ipconfig`;
$b=`ipconfig`;
var_dump($b);
屏蔽表达式可能的错误:@
echo @$a;
注:@一定是放在表达式前面
=>(数组)
->(对象)
instanceof(对象)
8)运算符的优先级
优先级:谁的优先级高先算谁
结合方向:规定了从哪个方向开始算
优先级、结合方向归纳:
1. 无,递增递减
2. 右,逻辑非
3. 左,乘、除、取余
4. 左,加、减、字符串连接符
5. 无,包含大于或小于号的运算符
6. 无,不包含大于或小于号的运算符
7. 左,逻辑与 &&
8. 左,逻辑或 ||
9. 左,?:
10. 右,赋值运算符
11. 左,逻辑异或 xor
注:使用括号可以增强代码的可读性
短路问题:
只要有逻辑运算符(逻辑与、逻辑或),那么运算结果就是一个true或false
那运算的过程就不重要了
$a=false;
$b=1;
$a && ++$b;
echo $b; //短路,上面++$b被短路了,$b还是1