相关文章推荐
独立的书签  ·  docker ...·  4 月前    · 
另类的蚂蚁  ·  使用pandas读取csv文件指定的前几行_ ...·  3 月前    · 
光明磊落的花生  ·  退出页面前发送请求实现方案 - 公瑾当年 ·  2 周前    · 
爱笑的热带鱼  ·  实战c++中的string系列--std:v ...·  1 年前    · 
有胆有识的黄瓜  ·  《文明6》《无主之地2》等史低,杉果2K厂商周开始·  1 年前    · 
悲伤的麻辣香锅  ·  下载网易云音乐的万能方法 - 哔哩哔哩·  2 年前    · 
听话的板栗  ·  北京君众律师事务所_百度百科·  2 年前    · 
低调的沙发  ·  WinForm程序启动控制台窗口Consol ...·  2 年前    · 
Code  ›  PHP 三元运算很好用也很容易踩雷开发者社区
php data
https://cloud.tencent.com/developer/article/1485082
性感的鸵鸟
2 年前
作者头像
写PHP的老王
0 篇文章

PHP 三元运算很好用也很容易踩雷

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 写PHP的老王 > PHP 三元运算很好用也很容易踩雷

PHP 三元运算很好用也很容易踩雷

作者头像
写PHP的老王
发布 于 2019-08-12 15:37:46
851 0
发布 于 2019-08-12 15:37:46
举报

PHP 三元运算在日常编码中应用非常频繁,可以很好的减少代码的长度,减少if-else的代码片段。但是好用是很好用,如果用的不恰当也是非常容易踩雷的。今天就看看PHP的三元运算符有什么雷区。

1、怎么执行的?

$type = 2;
echo $type == 1 ? "1" : $type == 2 ? "2"  : $type == 3 ? "3" : "4";

以上内容输出结果为3。

查看php运算符优先级表格,"=="的优先级别高于三元运算符。因此上面的代码等价于:

$res = $type == 1?"1":($type == 2);
//$res = true
$res = $res ?2:($type ==3);
//$res=2
$res = $res ? "3" :4;
//$res = 3
echo $res;

网上很多都以"PHP三元运算符的运算顺序是反的"为标题的文章,其实,执行顺序并不是反的,而是运算符优先级的问题。

2、PHP7中新的三元运算与三元运算简写容易搞错

PHP7中新增三元运算符"??",在PHP5.3之后,三元运算符可以简写成"?:"的形式,这两者有什么区别呢?


$data = ['type' =>0];
$type1 = $data['type']??-1;
$type2 = $data['type']?:-1;
var_dump($type1,$type2);

以上代码输出内容分别未0,-1。

PHP7新增的三元运算符用于简化判断变量是否设置。上面的代码等价于一下内容:


$data = ['type'=>0];
$type1 = isset($data['type'])?$data['type']:-1;
$type2 = $data['type']?$data['type']:-1;

在日常开发当中,通常需要对数组键值是否存在进行判断。如果使用新的三元运算符就会变得简单很多。如果不使用新的三元运算符,同时没有进行键值检查,PHP会抛出一个NOTICE,比如以下代码:

$data = ['type' =>0];
$type1 = $data['status']??-1;
$type2 = $data['status']?:-1;
var_dump($type1,$type2);
 
推荐文章
独立的书签  ·  docker compose入门6—如何挂载卷_docker-compose volumes 挂载目录
4 月前
另类的蚂蚁  ·  使用pandas读取csv文件指定的前几行_pandas读取csv前几行
3 月前
光明磊落的花生  ·  退出页面前发送请求实现方案 - 公瑾当年
2 周前
爱笑的热带鱼  ·  实战c++中的string系列--std:vector<char> 和std:string相互转换(vector to stringstream)_std::vector<char> 转string-
1 年前
有胆有识的黄瓜  ·  《文明6》《无主之地2》等史低,杉果2K厂商周开始
1 年前
悲伤的麻辣香锅  ·  下载网易云音乐的万能方法 - 哔哩哔哩
2 年前
听话的板栗  ·  北京君众律师事务所_百度百科
2 年前
低调的沙发  ·  WinForm程序启动控制台窗口Console-阿里云开发者社区
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号