PHP 运算符
运算符是可以通过给出的一或多个值(编程行话:表达式)来产生另一个值(表达式)的东西。
表达式
表达式是 PHP 最重要的基石,在 PHP 中几乎所写的任何东西都是一个表达式,表达式就是“任何有值的东西”。
算术运算符
例子 | 名称 | 结果 |
---|---|---|
+$a | 标识 | 根据情况将 $a 转化为 int 或 float。 |
-$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 的 $b次方的值。 |
赋值运算符
基本赋值运算符“=”,把右边表达式的值赋给左边的变量。
<?php $a = ($b = 4) + 5; // $a 现在成了 9,而 $b 成了 4。
引用赋值运算符“&”,使用“$var = &$othervar;”语法,引用赋值意味着两个变量指向了同一个数据。
<?php $a = 3; $b = &$a; // $b 是 $a 的引用 print "$a\n"; // 输出 3 print "$b\n"; // 输出 3 $a = 4; // 修改 $a print "$a\n"; // 输出 4 print "$b\n"; // 也输出 4,因为 $b 是 $a 的引用,因此也被改变
算术赋值运算符:
例子 | 等同于 | 操作 |
---|---|---|
$a += $b | $a = $a + $b | 加法 |
$a -= $b | $a = $a - $b | 减法 |
$a *= $b | $a = $a * $b | 乘法 |
$a /= $b | $a = $a / $b | 除法 |
$a %= $b | $a = $a % $b | 取模 |
$a **= $b | $a = $a ** $b | 指数 |
位赋值运算符:
例子 | 等同于 | 操作 |
---|---|---|
$a &= $b | $a = $a & $b | 按位与 |
$a |= $b | $a = $a | $b | 按位或 |
$a ^= $b | $a = $a ^ $b | 按位异或 |
$a <<= $b | $a = $a << $b | 左移 |
$a >>= $b | $a = $a >> $b | 右移 |
其他赋值运算符:
例子 | 等同于 | 操作 |
---|---|---|
$a .= $b | $a = $a . $b | 字符串拼接 |
$a ??= $b | $a = $a ?? $b | NULL 合并 |
位运算符
位运算符允许对整型数中指定的位进行求值和操作。
例子 | 名称 | 结果 |
---|---|---|
$a & $b | And(按位与) | 将把 $a 和 $b 中都为 1 的位设为 1。 |
$a | $b | Or(按位或) | 将把 $a 和 $b 中任何一个为 1 的位设为 1。 |
$a ^ $b | Xor(按位异或) | 将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1。 |
~ $a | Not(按位取反) | 将 $a 中为 0 的位设为 1,反之亦然。 |
$a << $b | Shift left(左移) | 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。 |
$a >> $b | Shift right(右移) | 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。 |
位移在 PHP 中是数学运算,向任何方向移出去的位都被丢弃。
左移时右侧以零填充,符号位被移走意味着正负号不被保留。
右移时左侧以符号位填充,正负号被保留。
比较运算符
比较两个值的大小。
例子 | 名称 | 结果 |
---|---|---|
$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 <=> $b | 太空船运算符(组合比较符) | 当$a小于、等于、大于 $b时 分别返回一个小于、等于、大于0的 int 值。 |
错误控制运算符(不建议使用)
错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式产生的任何错误信息都被忽略掉。
@ 运算符只对表达式有效,不能把它放在函数或类的定义之前,也不能用于条件结构例如 if 和 foreach 等。
<?php /* 故意引发文件错误 */ $my_file = @file ('non_existent_php_file') or die ("Failed opening file: error was '" . error_get_last()['message'] . "'"); // 即使$key不存在也不会报错 $value = @$cache[$key];
执行运算符
执行运算符:反引号(``),将反引号中的内容作为 shell 命令来执行,并将其输出信息返回,效果与函数 shell_exec() 相同。
<?php $output = `ls -al`; echo "<pre>$output</pre>";
注意:禁用 shell_exec() 时反引号运算符是无效的。
递增/递减运算符
例子 | 名称 | 效果 |
---|---|---|
++$a | 前加 | $a 的值加一,然后返回 $a。 |
$a++ | 后加 | 返回 $a,然后将 $a 的值加一。 |
--$a | 前减 | $a 的值减一, 然后返回 $a。 |
$a-- | 后减 | 返回 $a,然后将 $a 的值减一。 |
逻辑运算符
例子 | 名称 | 结果 |
---|---|---|
$a and $b | And(逻辑与) | true,如果 $a 和 $b 都为 true。 |
$a or $b | Or(逻辑或) | true,如果 $a 或 $b 任一为 true。 |
$a xor $b | Xor(逻辑异或) | true,如果 $a 或 $b 任一为 true,但不同时是。 |
! $a | Not(逻辑非) | true,如果 $a 不为 true。 |
$a && $b | And(逻辑与) | true,如果 $a 和 $b 都为 true。 |
$a || $b | Or(逻辑或) | true,如果 $a 或 $b 任一为 true。 |
字符串运算符
连接运算符(“.”):返回其左右参数连接后的字符串。
连接赋值运算符(“.=”):将右边参数附加到左边的参数之后。
<?php $a = "Hello "; $b = $a . "World!"; // 现在 $b 是 "Hello World!" $a = "Hello "; $a .= "World!"; // 现在 $a 是 "Hello World!"
数组运算符
例子 | 名称 | 结果 |
---|---|---|
$a + $b | 联合 | $a 和 $b 的联合。 |
$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。 |
类型运算符
类型运算符( instanceof ):用于确定一个 PHP 变量是否属于某一类 class 的实例。
<?php class MyClass { } class NotMyClass { } $a = new MyClass; var_dump($a instanceof MyClass); var_dump($a instanceof NotMyClass);
运算符优先级
注意:为保证可读性,要用括号确保想要的优先级。
如果运算符优先级相同,那运算符的结合方向决定了该如何运算。
结合方向 | 运算符 | 附加信息 |
---|---|---|
不适用 | clone new | clone 和 new |
右 | ** | 算术运算符 |
不适用 | ++ -- ~ (int) (float) (string) (array) (object) (bool) @ | 类型、递增/递减 |
左 | instanceof | 类型 |
不适用 | ! | 逻辑运算符 |
左 | * / % | 算术运算符 |
左 | + - . | 算术运算符 和 字符串运算符 |
左 | << >> | 位运算符 |
无 | < <= > >= | 比较运算符 |
无 | == != === !== <> <=> | 比较运算符 |
左 | & | 位运算符 和 引用 |
左 | ^ | 位运算符 |
左 | | | 位运算符 |
左 | && | 逻辑运算符 |
左 | || | 逻辑运算符 |
右 | ?? | null 合并运算符 |
左 | ? : | 三元运算符 |
右 | = += -= *= **= /= .= %= &= |= ^= <<= >>= ??= | 赋值运算符 |
不适用 | yield from | yield from |
不适用 | yield | yield |
不适用 | ||
左 | and | 逻辑运算符 |
左 | xor | 逻辑运算符 |
左 | or | 逻辑运算符 |