1.一元运算符
运算符 | 名称 | 描述 |
+$a | 取正 | 根据情况将 $a 转化为 int 或 float。 |
-$a | 取反 | $a 的负值。 |
++$a | 前递增 | $a 的值加 1,然后返回 $a。 |
--$a | 前递减 | $a 的值减 1, 然后返回 $a。 |
$a++ | 后递增 | 返回 $a,然后将 $a 的值加 1。 |
$a-- | 后递减 | 返回 $a,然后将 $a 的值减 1。 |
2.算术运算符
运算符 | 名称 | 描述 |
$a + $b | 加法 | $a 和 $b 的和。 |
$a - $b | 减法 | $a 和 $b 的差。 |
$a * $b | 乘法 | $a 和 $b 的积。 |
$a / $b | 除法 | $a 除以 $b 的商。 |
$a % $b | 取模 | $a 除以 $b 的余数。 |
$a ** $b | 求幂 | $a 的 $b次方的值。 |
3.赋值运算符
运算符 | 名称 | 等同于 |
$a = $b | 赋值 | —————— |
$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 | NULL 合并赋值 | $a = $a ?? $b |
4.相等性运算符
当使用相等运算符(==
)时,如果两个对象是同一类的实例,且具有相同的属性和值(值使用 ==
进行比较),则它们是相等的。
当使用全等运算符(===
)时,如果两个对象都引用同一类的同一个实例,则它们是全等的。
运算符 | 名称 | 描述 |
$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。 |
5.关系比较运算符
运算符 | 名称 | 描述 |
$a < $b | 小于 | 如果 $a 严格小于 $b,则返回 true。 |
$a <= $b | 小于等于 | 如果 $a 小于或者等于 $b,则返回 true。 |
$a > $b | 大于 | 如果 $a 严格大于 $b,则返回 true。 |
$a >= $b | 大于等于 | 如果 $a 大于或者等于 $b,则返回 true。 |
$a <=> $b | 太空船运算符(组合比较运算符) | 当 $a 小于、等于、大于 $b 时,则分别返回一个小于、等于、大于 0 的 int 值。 |
6.布尔逻辑运算符
运算符 | 名称 | 描述 |
!表达式 | 逻辑非(not) | 如果表达式的计算结果为“假”,则返回 true ,否则返回 false 。 |
表达式1 && 表达式2 | 逻辑与(and) | 如果左侧表达式1的计算结果为“假”,则不计算右侧表达式2并返回 false 。如果左侧表达式1的计算结果为“真”,则继续计算右侧表达式2并返回右侧表达式2的返回值 true 或 false 。 |
表达式1 || 表达式2 | 逻辑或(or) | 如果左侧表达式1的计算结果为“真”,则不计算右侧表达式2并返回 true 。如果左侧表达式1的计算结果为“假”,则继续计算右侧表达式2并返回右侧表达式2的返回值 true 或 false 。 |
表达式1 and 表达式2 | and运算符 | && 运算符的低优先级版本,之所以使用 and 运算符,是因为它的名字是英文单词,更易于阅读。 |
表达式1 or 表达式2 | or运算符 | || 运算符的低优先级版本,之所以使用 or 运算符,是因为它的名字是英文单词,更易于阅读。 |
表达式1 xor 表达式2 | xor(逻辑异或)运算符 | 如果左侧表达式1 或 右侧表达式2 任一计算结果为“真”,但不同时是,则返回 true ,否则返回 false 。 |
7.位运算符
运算符 | 名称 | 描述 |
~ $a | Not(按位取反) | 将 $a 中为 0 的位设为 1,反之亦然。 |
$a & $b | And(按位与) | 将把 $a 和 $b 中都为 1 的位设为 1。 |
$a | $b | Or(按位或) | 将把 $a 和 $b 中任何一个为 1 的位设为 1。 |
$a ^ $b | Xor(按位异或) | 将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1。 |
$a << $b | Shift left(左移位) | 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。 |
$a >> $b | Shift right(右移位) | 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。 |
8.三元条件运算符
运算符 | 描述 |
(expr1) ? (expr2) : (expr3) | 在 expr1 求值为 true 时,整个表达式的值为 expr2,在 expr1 求值为 false 时,整个表达式的值为 expr3。 |
expr1 ?: expr3 | 在 expr1 求值为 true 时,整个表达式的值为 expr1,在 expr1 求值为 false 时,整个表达式的值为 expr3。 |
9.字符串连接运算符
运算符 | 名称 | 等同于 |
$a . $b | 字符串连接运算符 | —————— |
$a .= $b | 字符串连接赋值运算符 | $a = $a . $b |
10.Null运算符
运算符 | 名称 | 描述 |
(expr1) ?? (expr2) | Null合并运算符 | 当 expr1 为 null,整个表达式的值为 expr2,否则为 expr1。 |
(expr1)?->(expr2)?->(expr3) | Null安全运算符 | 从左往右依次计算,如果 ?-> 左侧的表达式为 null,则整个表达式立即停止计算并返回 null,否则往右继续计算,以此类推。 |
$result = $repository?->getUser(5)?->name;
//上边那行代码等价于以下代码
if (is_null($repository)) {
$result = null;
} else {
$user = $repository->getUser(5);
if (is_null($user)) {
$result = null;
} else {
$result = $user->name;
}
}
11.数组运算符
运算符 | 名称 | 描述 |
$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。 |
12.类型运算符
运算符 | 名称 | 描述 |
instanceof | 类型运算符 | 用于确定一个 PHP 变量是否是某一个类的实例。 |
13.执行(Execution)运算符
运算符 | 名称 | 描述 |
反引号`` | 执行(Execution)运算符 | PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回。使用反引号` `的效果与函数 shell_exec() 相同。 |
$output = `ls -al`;
echo "<pre>$output</pre>";
14.错误控制(Error Control)运算符
运算符 | 名称 | 描述 |
@expr | 错误控制(Error Control)运算符 | 当将 @ 放置在一个 PHP 表达式之前,该表达式可能产生的任何错误诊断都被抑制。 |
15.范围解析(Scope Resolution)运算符
运算符 | 名称 | 描述 |
:: | 范围解析(Scope Resolution)运算符,又称为 Paamayim Nekudotayim(希伯来语:双冒号的意思) 或 双冒号。 | 用于访问静态属性、静态方法、类常量,还可以用于访问父类中已覆盖的实例方法、构造函数、析构函数、魔术方法。 |
16.非运算符
非运算符 | 名称 | 描述 |
空白符 | 空白符 | 空格符、水平制表符、垂直制表符、换行符、换页符、回车符等。 |
; | 分号 | 指令分隔符(Instruction Separation) |
... | 省略号 | 用于变量赋值和方法参数。 |
16.1...
扩展(spread)运算符
16.1.1用于变量赋值
暂不支持用于数组解构(destructuring)赋值,支持用于数组解包(unpacking)赋值。
数组解包(unpacking)赋值用于把已存在的 数组(或实现了 Traversable
接口的类的对象) 中的元素解包复制到新的 数组(实现了 Traversable
接口的类的对象) 中。支持 array()
语言结构创建方式 和 []
字面量创建方式的数组。
…索引数组
//新数组中的元素全部由老数组中的元素组成。
$arr1 = [1, 2, 3];
//解包一次
$arr2 = [...$arr1]; // [1, 2, 3]
//解包多次(两个$arr1)
$arr3 = [...$arr1, ...$arr1]; // [1, 2, 3, 1, 2, 3]
//新数组中的部分元素由老数组中的元素组成。
$arr1 = [1, 2, 3];
//新老数组无重复元素
//解包一次
$arr4 = [0, ...$arr1]; // [0, 1, 2, 3]
//解包多次(一个$arr1,另一个$arr2)
$arr5 = [...$arr1, ...$arr2, 111]; // [1, 2, 3, 1, 2, 3, 111]
//新老数组有重复元素,不会去重,仅此复制而已。
//解包一次
$arr6 = [1, ...$arr1]; // [1, 1, 2, 3]
//解包多次
$arr7 = [...$arr1, ...$arr2, 3]; // [1, 2, 3, 1, 2, 3, 3]
//等同于 [0 => 1, 1 => 2, 2 => 3]
$arr9 = [1, 2, 3];
//等同于 [0 => 4, 1 => 5, 2 => 6]
$arr10 = [4, 5, 6];
//[1, 2, 3, 4, 5, 6],等同于 [0 => 1, 1 => 2, 2 => 3, 3 => 4, 4 => 5, 5 => 6],老数组的索引没有被保存,而是新数组的索引会重新排序,所以不会出现覆盖。
$arr11 = [...$arr4, ...$arr5];
…关联数组
//无重复键
$arr1 = ["a" => 1];
$arr2 = ["b" => 2];
$arr3 = ["c" => 0, ...$arr1, ...$arr2];
var_dump($arr3); // ["c" => 0, "a" => 1, "b" => 2]
//有重复键,那遵循关联数组的多个元素如果使用相同的键名,则只有最后一个元素会被使用,其它的元素都会被最后一个元素覆盖。
$arr1 = ["a" => 1];
$arr2 = ["a" => 2];
$arr3 = ["a" => 0, ...$arr1, ...$arr2];
var_dump($arr3); // ["a" => 2]
…混合数组
$arr1 = [1, 2, 3];
$arr2 = ['a' => 4];
$arr3 = [...$arr1, ...$arr2];
var_dump($arr3); // [1, 2, 3, "a" => 4]
…函数名()
//老数组作为函数的返回值
function getArr() {
return ['a', 'b'];
}
$arr8 = [...getArr(), 'c' => 'd']; // ['a', 'b', 'c' => 'd']
16.1.2用于方法参数
//用于剩余数组形参
function sum(...$numbers) {
$acc = 0;
foreach ($numbers as $n) {
$acc += $n;
}
return $acc;
}
echo sum(1, 2, 3, 4);
//输出
10
//用于解包数组(或实现了Traversable接口的类的对象)为独立的实参,支持array()语言结构创建方式和[]字面量创建方式的数组。
function add($a, $b) {
return $a + $b;
}
echo add(...[1, 2])."\n";
$a = [1, 2];
echo add(...$a);
//输出
3
3
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/php/phplang/28869.html