PHP中isset和empty的区别,??和?:的区别

事情的经过是这样的,今天面试一个架构师。自称非常熟悉php7,了解php8。

两个问题

1. isset和empty的区别

说说isset()empty() 的区别了

假设一个数组如下:

$arr = [
   'a' => 0,
   'b' => null
];
var_dump(isset($arr['a']));//bool(true)
var_dump(empty($arr['a']));//bool(true)

var_dump(isset($arr['b']));//bool(false)
var_dump(empty($arr['b']));//bool(true)

  • isset — 检测变量是否已设置并且非 NULL
  • empty — 检查一个变量是否为空 。 判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。

当var存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE.
以下的东西被认为是空的:
- "" (空字符串)
- 0 (作为整数的0)
- 0.0 (作为浮点数的0)
- "0" (作为字符串的0)
- NULL
- FALSE
- array() (一个空数组)
- $var; (一个声明了,但是没有值的变量)


2.三元运算符的简写 ?: 和 NULL 运算符 ??

这里我问了一个问题:

/**
 * @var $a mixed
 */
return $a ? $a : 100;

应该怎么简写,期望得到的结果是 return $a ?: 100;
结果:得到的是 return $a ?? 100

  • Q:我问的一个问题是,如果用两个问号,$a = 0 ,那结果是多少?
  • A:100(斩钉截铁)
$a = 0;
echo $a ? $a : 100; //100
echo $a ?? 100; //0
echo $a ?: 100; //100


$a = null;
echo $a ? $a : 100; //100
echo $a ?? 100; //100
echo $a ?: 100; //100

补一个官方文档比较运算符 ¶ 。

你可能感兴趣的:(PHP中isset和empty的区别,??和?:的区别)