PHP面试知识复习(四):常用运算符

定义

通过给定的一个或多个值,产生另一个值的东西

优先级

从高到低

  • 递增/递减
  • !
  • 算术运算符
  • 大小比较
  • (不)相等比较
  • 引用
  • 位运算符(^
  • 位运算符(|
  • 逻辑与
  • 逻辑或
  • 三目
  • 赋值
  • and
  • xor
  • or

种类

算术运算符

例子名称结果
-$a取反$a 的负值。
$a + $b加法$a 和 $b 的和。
$a - $b减法$a 和 $b 的差。
$a * $b乘法$a 和 $b 的积。
$a / $b除法$a 除以 $b 的商。
$a % $b取模$a 除以 $b 的余数。
  • 取模在运算前会将操作的数转换为整数(去掉小数)
  • $a % $b的正负结果与$a的相同,如:
1
2
3
4
5
6
<?php
echo (5 % 3)."\n"; // 2
echo (5 % -3)."\n"; // 2
echo (-5 % 3)."\n"; // -2
echo (-5 % -3)."\n"; // -2
?>

赋值运算符

传值赋值

将右边的值给左边

1
2
3
4
<?php
$a = 1;
$b = $a;
?>

可以与算术运算符、连接运算符组合使用,使用左边的值,并把右边的结果交给左边

例子效果
$a += 1$a = $a + 1
$a -= 1$a = $a - 1
$a *= 1$a = $a * 1
$a /= 1$a = $a / 1
$a %= 1$a = $a % 1
$a .= 1$a = $a . 1

如果操作涉及对象时,PHP5传的是引用,除非明确使用clone关键字复制

引用赋值

将右边的引用给左边

1
2
3
4
<?php
$a = 1;
$b = &$a;
?>

位运算符

对整型数中指定的位进行求值操作

例子名称结果
$a & $bAnd(按位与)将把 $a 和 $b 中都为 1 的位设为 1。
$a | $bOr(按位或)将把 $a 和 $b 中任何一个为 1 的位设为 1。
$a ^ $bXor(按位异或)将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1。
~ $aNot(按位取反)将 $a 中为 0 的位设为 1,反之亦然。
$a << $bShift left(左移)将 $a 中的位向左移动 $b 次(每一次移动都表示乘以 2)。
$a >> $bShift right(右移)将 $a 中的位向右移动 $b 次(每一次移动都表示除以 2)。

执行过程

  • 将两个数转为二进制数
  • 根据符号对两个数进行运算
    • 被移出的位会被丢弃
    • 左移时右侧以0填充
  • 将运算结果转回十进制

比较运算符

对两个值进行比较,返回布尔值

例子名称结果
$a == $b等于TRUE,如果类型转换后 $a 等于 $b。
$a === $b全等TRUE,如果 $a 等于 $b,并且它们的类型也相同。
$a != $b不等TRUE,如果类型转换后 $a 不等于 $b。
$a <> $b不等TRUE,如果类型转换后 $a 不等于 $b。
$a !== $b不全等TRUE,如果 $a 不等于 $b,或者它们的类型不同。
$a < $b小与TRUE,如果 $a 严格小于 $b。
$a > $b大于TRUE,如果 $a 严格大于 $b。
$a <= $b小于等于TRUE,如果 $a 小于或者等于 $b。
$a >= $b大于等于TRUE,如果 $a 大于或者等于 $b。

错误控制运算符

将运算符(@)放在表达式前(如@$a),则该表达式可能产生的所有错误信息都被忽略

递增/递减运算符

例子名称效果
++$a前加$a 的值加一,然后返回 $a。
$a++后加返回 $a,然后将 $a 的值加一。
–$a前减$a 的值减一, 然后返回 $a。
$a–后减返回 $a,然后将 $a 的值减一。
  • 不影响布尔值
  • 递增NULL值返回1,递减NULL值没效果

逻辑运算符

例子名称结果
$a and $bAnd(逻辑与)TRUE,如果 $a 和 $b 都为 TRUE。
$a or $bOr(逻辑或)TRUE,如果 $a 或 $b 任一为 TRUE。
$a xor $bXor(逻辑异或)TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是。
! $aNot(逻辑非)TRUE,如果 $a 不为 TRUE。
$a && $bAnd(逻辑与)TRUE,如果 $a 和 $b 都为 TRUE。
$a || $bOr(逻辑或)TRUE,如果 $a 或 $b 任一为 TRUE。

短路作用

如果操作符左边的表达式符合要求,则会马上返回结果,右边的表达式不会执行

例子结果
false && foo()返回falsefoo()不会执行
true || foo()返回truefoo()不会执行
false and foo()返回falsefoo()不会执行
true or foo()返回truefoo()不会执行

字符串运算符

  • 连接运算符(.
  • 连接赋值运算符(.=
例子效果
$a = $a . 1$a = $a . 1
$a .= 1$a = $a . 1

类型运算符

instanceof用来确定变量是否属于某一类的实例

1
2
3
4
<?php
$a = new stdClass;
var_dump($a instanceof stdClass);
?>