php中isset和empty引发出对数据类型的探究

前言

最近在工作以及面试过程中,都和别人探讨了关于isset和empty的返回值问题。发现很多人(包括自己)对于一些基础掌握的不好,认知不够全面。

一、php中的原始数据类型

1、四种标量类型

  • integer(整型)
  • string(字符串)
  • boolean(布尔型)
  • float(浮点型,也称作 double)

2、三种复合类型

  • array(数组)
  • object(对象)
  • callable(可调用)

3、两种特殊类型

  • resource(资源)
  • NULL(无类型)

二、关于true和false的定义

其中,以下值被认为是false:

数据类型
布尔 false本身
整型 0
浮点型 0.0
字符串 空字符串
字符串 字符串’0’
数组 不包括任何元素的数组
特殊类型NULL NULL

那么相反,其余则为true。

场景一:空格被认为不为空

平时,我们喜欢用if(变量名)来进行判断,但是如果不太理解true和false,就可能偷偷绕过此验证。

例如:

$content = ' ';

if ($content){
    
    
    echo '存在文章内容';
}else{
    
    
    echo '不存在文章内容';
}

输出结果:
在这里插入图片描述
在空字符中间有空格的情况,则会视之为true,因此,跳过该验证。

那么记住:

空字符串!== 含有空格字符串

数据类型
空字符串 false
空格字符串 true

三、关于isset

isset检测变量是否存在或是否为NULL,如果变量存在并且不为NULL的情况下为true,其余皆为false。

下面列举一下返回false的仅此两种情况:

场景一:变量不存在

<?php
$a = 123;
if (isset($b)){
    
    
    echo true;
}else{
    
    
    echo false;
}

场景二:变量值为null

<?php
$param = null;
if (isset($param)){
    
    
    echo true;
}else{
    
    
    echo false;
}

四、关于empty

empty判断变量是否为空,如果为空则为true,否则为false。

场景一:变量不存在为true

<?php
echo empty($a);

场景二:变量值为整形中的0为true

0本身就是false,所以empty后就定义为空

<?php
$a = 0;
if (empty($a)){
    
    
    echo true;
}else{
    
    
    echo false;
}

五、不同类型之间比较进行的转换

1、数字和字符串之间的比较

例如:

echo 'string'==0;

输出结果为:1

因为,当字符串和整形比较的时候,会分析这个字符串:

  • 如果字符串中开头不是数字,直接转换为数字0。
  • 如果字符串中开头是数字,取其连续的数字。
echo (int)'0a12str2ing';//输出0
echo (int)'012str2ing';//输出12
echo (int)'st4354r2ing';//输出0
echo (int)'1e1';//输出10
echo (int)'1e2';//输出100

2、其它类型之间的比较

数据类型1 数据类型2 结果
null 或 string string null 转换为 “”,进行数字或词汇比较
bool 或 null 任何其它类型 转换为 bool,false < true
object object 内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性
string、resource、int、float string、resource、int、float 将字符串和资源转换成数字,按普通数学比较
array array 具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较
object 任何其它类型 object 总是更大
array 任何其它类型 array 总是更大

六、一些常用的比较

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

基础不牢,地动山摇
end~

おすすめ

転載: blog.csdn.net/qq_42249896/article/details/115645766
おすすめ