说说php的那些坑
在项目里遇到一个有意思的事,判断php中0和空的问题。
a值呢,默认为空字符串。此时我们传的参数为0值。
example:
$a = 0;
if(!empty($a)){
if($a == 0){
echo '0';
}elseif ($a == 1){
echo '1';
}
}else{
echo '3';
}
在上面的例子中,我们一不注意,得到的值就是0,可惜,输出的值是3。
在PHP中变量是以C语言的结构体来存储的,空字符串和NULL,false都是以值为0存储的,其中这个结构体有个zend_uchar type;这样的成员变量,他是用来保存变量的类型的,而空字符串的类型是string,NULL的类型是NULL,false是boolean。
这一点可以用echo gettype('');和echo gettype(NULL);来打印看看!而===运算符是不单比较值,还有比较类型的,所以第三个为false!
那么我们既要判断a值不为空,又要判断a的值为0,怎么判断呢?
解决办法:
if(is_numeric($a)){
if($a == 0){
echo '0';
}elseif ($a == 1){
echo '1';
}
}else{
echo '3';
}
另外再说下,php中
= 一个等号是赋值
== 两个等号是判断相等且只比较值,不比较类型
=== 三个等号是判断值和类型都相等
!= 不等于符号,只比较值,不管类型
!== 不全等符号,比较值和类型
所以 空字符串(''),false, NULL 和 0是值相等而类型不一样!
龙卷风之殇

浙公网安备 33010602011771号