事情的经过是这样的,今天面试一个架构师。自称非常熟悉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
补一个官方文档比较运算符 ¶ 。