php 空合并运算符的坑

本文探讨了PHP7引入的null合并运算符(??)在PHP8中的延续使用,通过示例展示了当$a未定义或为空(如null、0、空字符串)时,如何与$b进行合并。指出将PHP的empty()判断习惯套用到??上可能产生的误解,并提醒开发者在不熟悉其特性和边界情况时谨慎使用此语法,以避免潜在问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在PHP7中引入了null合并运算符(??),php8里面延续了该语法,具体如下:

$a??$b

1. $a 为未定义的情况

<?php

//$a=0;
$b=1;

$c=$a??$b;
var_dump($c);
int(1)
➜  data vim quote.php
➜  data php -v
PHP 8.0.11 (cli) (built: Oct 26 2021 16:09:14) ( NTS DEBUG )
Copyright (c) The PHP Group
Zend Engine v4.0.11, Copyright (c) Zend Technologies

2.在$a已定义的情况下 $a??$b 的结果

a.$a=null的时候等于??后面的值

<?php

$a=null;
$b=1;

$c=$a??$b;
var_dump($c);

output:

int(1)

b.$a=0的时候等于$a

<?php

$a=0;
$b=1;

$c=$a??$b;
var_dump($c);

output:

int(0)

c.$a=1的时候等于$a

<?php

$a=2;
$b=1;

$c=$a??$b;
var_dump($c);

output:

int(2)

d.$a=""的时候等于$a

<?php

$a="";
$b=1;

$c=$a??$b;
var_dump($c);
output:
string(0) ""

我们习惯性的把php的empty()的判断结论套用到??上(0、"",null 都是空值),所以才会有这么多坑,作为一个语言的特性延展,??并不是一个很好的表达式,反而会让老鸟们造新坑,如果不清楚其特性或者没有做边界测试,建议不要为了偷懒直接使用该语法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值