🎬 HoRain 云小助手:个人主页
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
目录
⛳️ 推荐
一、运算符核心分类
1. 算术运算符
2. 赋值运算符
3. 比较运算符
4. 逻辑运算符
5. 字符串运算符
二、特殊与高级运算符
1. 三元与空合并运算符
2. 错误控制与执行运算符
3. 位运算符
三、运算符优先级与结合性
1. 优先级规则
2. 结合性影响
四、常见陷阱与最佳实践
1. 高频陷阱
2. 最佳实践
PHP 共有17 类运算符,按功能分为算术、赋值、比较、逻辑、字符串等类别,运算符优先级和结合性决定表达式求值顺序,其中&&与||优先级高于and与or,且三元运算符在 PHP 8.0 前为左结合,8.0+ 改为右结合。合理使用括号明确运算顺序可避免逻辑错误,关键特性包括空合并运算符??和联合比较运算符<=>,以下按核心分类展开说明:
一、运算符核心分类
1.算术运算符
执行数学运算,幂运算**优先级高于乘除:
- 基础运算:
+(加)、-(减)、*(乘)、/(除)、%(取模,除数不能为 0)、**(幂,如2**3结果为8)。 - 递增/递减:
$a++(后置,先返回值再自增)、++$a(前置,先自增再返回值)。 - 注意:
%取模结果的符号与被除数一致(如-5 % 3结果为-2)。
2.赋值运算符
将右侧表达式结果赋给左侧变量:
- 基础赋值:
=(如$a = 5)。 - 复合赋值:
+=、-=、*=、/=、.=(字符串连接)、??=(空合并赋值,PHP 7.4+)。 - 关键特性:复合赋值可减少变量查找次数,提升性能(如
$a += 2比$a = $a + 2更高效)。
3.比较运算符
返回布尔值,严格比较===避免类型隐式转换陷阱:
- 松散比较:
==(值相等,如"5" == 5为true)、!=、<>。 - 严格比较:
===(值和类型均相等,如"5" === 5为false)、!==。 - 其他:
<、>、<=、>=、<=>(联合比较运算符,PHP 7.0+,返回-1/0/1)。
4.逻辑运算符
控制条件分支,&&和||优先级高于and和or:
- 短路求值:
&&(逻辑与,左操作数为false时跳过右操作数)、||(逻辑或,左操作数为true时跳过右操作数)。 - 优先级陷阱:
$a = true && false结果为false,但$a = true and false因优先级问题结果为true($a先被赋值为true)。
5.字符串运算符
仅.(连接)和.=(连接赋值):
- 注意:双引号内变量会解析,单引号内直接输出(如
"Hello $name"vs'Hello $name')。
二、特殊与高级运算符
1.三元与空合并运算符
- 三元运算符
?::$result = $condition ? $value1 : $value2,PHP 8.0 前为左结合,8.0+ 改为右结合(如true ? "a" : false ? "b" : "c"在 8.0+ 解析为true ? "a" : ("b" : "c"))。 - 空合并
??:PHP 7.0+,仅当左侧为null时返回右侧值(如$name = $_GET['name'] ?? 'Guest'),避免isset()嵌套。
2.错误控制与执行运算符
- 错误控制
@:抑制错误提示(如@$file = fopen("noexist.txt", "r")),仅对E_WARNING/E_NOTICE有效,不推荐滥用。 - **执行运算符
`**:执行系统命令并返回输出(如`$output = `ls -l`;),存在安全风险,需严格过滤输入。
3.位运算符
对二进制位操作,常用于权限控制:
- 基础操作:
&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、<<(左移)、>>(右移)。 - 典型场景:
$permissions & 0x04检查是否包含“写权限”(0x04代表二进制100)。
三、运算符优先级与结合性
1.优先级规则
括号()优先级最高,以下为关键层级(从高到低):
- 括号与类型转换:
()、(int)、!(逻辑非)。 - 算术运算:
**→*/%→+-。 - 比较运算:
<<=>>=→=====!=!==。 - 逻辑运算:
&&→||→and/or(优先级最低)。 - 赋值运算:
=、??=等(右结合)。
2.结合性影响
- 左结合:同级运算符从左到右求值(如
1 - 2 - 3等价于(1 - 2) - 3)。 - 右结合:从右到左求值(如
$a = $b = 5等价于$a = ($b = 5))。 - 无结合性:相同优先级的比较运算符(如
1 < 2 > 1在 PHP 中非法)。
四、常见陷阱与最佳实践
1.高频陷阱
- 逻辑运算符混淆:
and/or优先级极低,$a = true and false实际执行为($a = true) and false,导致$a为true。 - 三元运算符嵌套歧义:
$a ? $b : $c ? $d : $e在 PHP 8.0 前解析为($a ? $b : $c) ? $d : $e,8.0+ 改为$a ? $b : ($c ? $d : $e),强烈建议用括号明确逻辑。 - 浮点数比较:
0.1 + 0.2 == 0.3返回false,应使用误差范围判断(如abs(($a + $b) - $c) < 0.0001)。
2.最佳实践
- 始终用
===代替==:避免类型隐式转换导致的逻辑错误(如0 == "abc"为true)。 - 复杂表达式加括号:即使了解优先级,也应通过括号提升可读性(如
($a && $b) || $c)。 - 优先使用
??和<=>:简化空值检查和排序逻辑(如usort($arr, fn($a, $b) => $a <=> $b))。
PHP 运算符设计兼顾简洁性与灵活性,但需警惕弱类型语言的隐式转换风险。掌握优先级规则、强制使用严格比较,并在关键逻辑中显式标注运算顺序,可显著减少隐蔽 Bug。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙