PHP 由 empty 和 isset 面试题引起的思考

栏目: PHP · 发布时间: 7年前

内容简介:PHP 由 empty 和 isset 面试题引起的思考
在我们的 php 面试中,一面基础面中经常会有面试官问 emptyisset 的区别,往往大家都是简单的说出两者的用法,其实如果深入进问题的本质,我认为不仅仅可以让面试官顺着你走,可能还会给面试官一种惊艳的感觉

  • 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 类型推断需要细说,所以类型推断下次会再给大家详细介绍

谢谢大家,如果看了我的文章有收获,还请为我点赞,当然如果可以关注就更好了,再次感谢大家


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构与算法分析

数据结构与算法分析

韦斯(Mark Allen Weiss) / 机械工业出版社 / 2010-8 / 45.00元

《数据结构与算法分析:C语言描述》曾被评为20世纪顶尖的30部计算机著作之一,作者在数据结构和算法分析方面卓有建树,他的数据结构和算法分析的著作尤其畅销,并受到广泛好评,已被世界500余所大学选作教材。 在《数据结构与算法分析:C语言描述》中,作者精炼并强化了他对算法和数据结构方面创新的处理方法。通过C程序的实现,着重阐述了抽象数据类型的概念,并对算法的效率、性能和运行时间进行了分析。 ......一起来看看 《数据结构与算法分析》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器