PHP中@if(!$variable1 == 1)与@if($variable1 != 1)的区别是什么
两个判断语句的差异解析
核心本质是PHP运算符优先级不同
- 第一条代码:
@if(!auth()->user()->role_id == 1) hidden @endif - 第二条代码:
@if(auth()->user()->role_id != 1) hidden @endif
第一条语句执行逻辑
PHP中逻辑非运算符!的优先级高于相等比较运算符==,所以语句会按照以下顺序执行:
- 先对
auth()->user()->role_id的返回值做逻辑非运算 - 再将取反后的布尔值和
1做相等比较
结合PHP弱类型比较规则:所有非0的数字取反后都会得到布尔值false,false和1比较的结果永远为false。也就是说无论role_id的取值是不是1,这条判断的结果几乎都是false,永远不会输出hidden属性,这就是它不生效的原因。
如果你想让第一条写法达到预期效果,需要加括号调整执行顺序:@if(!(auth()->user()->role_id == 1)) hidden @endif,调整后和第二条语句逻辑完全等价。
第二条语句执行逻辑
不等于运算符!=是直接对左右两个操作数做比较,语句会直接判断auth()->user()->role_id的值是否不等于1,执行逻辑完全符合预期,所以可以正常输出hidden属性。
内容的提问来源于stack exchange,提问作者Kurt
相关产品推荐
相关产品推荐

