目录
前言
最近在工作以及面试过程中,都和别人探讨了关于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~