内容简介:PHP 由 empty 和 isset 面试题引起的思考
在我们的 php 面试中,一面基础面中经常会有面试官问 empty
和 isset
的区别,往往大家都是简单的说出两者的用法,其实如果深入进问题的本质,我认为不仅仅可以让面试官顺着你走,可能还会给面试官一种惊艳的感觉
- empty — 检查一个变量是否为空
- 当变量存在,并且是一个非空非零的值时返回 false 否则返回 true
- 一下变量都被认为是空
' '
(空字符串)0
(作为整数的0)0.0
(作为浮点数的0)"0"
(作为字符串的0)null
false
array()
(一个空数组)$var;
(一个声明了,但是没有值的变量)
- isset — 检测变量是否已设置并且非 null
- 如果变量存在并且值不是 null 则返回 true,否则返回 false
- 这里我们会发现 empty 和 isset 细节的区别其实就在 为
空
和为null
- 所以只要我们能区分
空
和null
的概念就非常容易理解这两个函数的区别 - 事实上 为
空
包含了为null
这个感念,为null
只有变量未声明
和赋为null
这两种
- 在这里细心的同学就会问,
false
是为空,为什么同为布尔类型的true
并不为空呢? - 其实很简单 因为
true
虽然类型为布尔类型但值不为0
- 而
false 0.0 "0" '' null
虽然类型各异,但值都为0
所以他们为空
<?php
$array = [0.0, '0', '', null, false];
$len = count($array);
for ($i = 0; $i < $len; $i++) {
if (0 == $array[$i])
echo 'yes' . PHP_EOL;
else
echo 'no' . PHP_EOL;
}
- 验证结果会输出 5个
yes
,而把==
改为===
后会输出5个no
- 这里就引申到了我们 php 类型判断了
- php 是怎么进行类型判断的呢?这其实和 php zval 结构体有关系
- 由于 php 类型推断需要细说,所以类型推断下次会再给大家详细介绍
谢谢大家,如果看了我的文章有收获,还请为我点赞,当然如果可以关注就更好了,再次感谢大家
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java学习指南(第4版)(上下册)
Patrick Niemeyer、Daniel Leuck / 李强、王建新、吴戈 / 人民邮电出版社 / 2014-7 / 128.00元
《Java学习指南(第4版)(上、下册)》是畅销Java学习指南的最新版,详细介绍了Java 6和Java 7的语言特性和API。本书全面介绍了Java的基础知识,力图通过完备地介绍Java语言、其类库、编程技术以及术语,从而成为一本名符其实的入门级图书。 《Java学习指南(第4版)(上、下册)》加入了从Java 6和Java 7发布以后的变化,包括新的语言功能、并发工具(Fork-Joi......一起来看看 《Java学习指南(第4版)(上下册)》 这本书的介绍吧!