博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP中的空值问题
阅读量:6125 次
发布时间:2019-06-21

本文共 2546 字,大约阅读时间需要 8 分钟。

hot3.png

在PHP中"", 0, "0", NULL, FALSE, array(), var $var,以及没有任何属性的对象都将被认为是空的。但要注意array(array())不是空的。

一、在工作当中出现一个这样的问题

$data['result']['customer']['pros'] = array();
if(!empty($customer_products)){
foreach($customer_products as $product){
$customer_products_temp = array();
$customer_products_temp['productid'] = $product['productid'];
$customer_products_temp['productname'] = $product['productname'];
$customer_products_temp['authorname'] = $product['authorname'];
array_push($data['result']['customer']['pros'],$customer_products_temp);
}
}

当$myarrs 的值对应 array(array())时会报错如不存在productid等字段,当时疑惑前面已经判断$customer_products不是空的了怎么会出现这个问题呢,后来发现$customer_products时二维数组当$customer_products === array(array())时它的值不为空,但此时foreach中的$product是空值,根本就不存在$product['productid']等。

上面代码应该修改为

$data['result']['customer']['pros'] = array();
if(!empty($customer_products)){
foreach($customer_products as $product){
if(!empty($product)){
$customer_products_temp = array();
$customer_products_temp['productid'] = $product['productid'];
$customer_products_temp['productname'] = $product['productname'];
$customer_products_temp['authorname'] = $product['authorname'];
array_push($data['result']['customer']['pros'],$customer_products_temp);
}
}
}

二、关于0,null,false,'','0','null'的值是否相等的问题

echo "0 and null is:";
echo 0 == null ? 'equal' : 'unequal';
echo '
'; //输出:0 and null is:equal
echo "0 and 'null' is:";
echo 0 == null ? 'equal' : 'unequal';
echo '
'; //输出:0 and 'null' is:equal
echo "null and 'null' is:";
echo null == 'null' ? 'equal' : 'unqual';
echo '
'; //输出:null and 'null' is:unqual

起初对于第三个结果有个疑惑,这相当于:甲 == 已 ,甲 == 丙,但是 已 != 丙。看了PHP的自动类型转换后明白了。"null"是不带数字的字符串在 0 == "null"计算自动转换为整型0,但是自动转换并没有改变"null"的类型。

三、自动类型转换 在PHP中,自动转换通常发生在不同数据类型的变量进行混合运算是。若参与运算量的数据类型不同,则先转换成同一类型,然后再进行运算。通常只有4种标量类型(integer, float, string, boolean)才使用自动类型转换。注意,这并没有改变这些运算数本身的类型,改变的仅是这些运算数如何被求值。自动类型转换虽然是由系统自动完成的,但在混合运算时,自动转换要遵循转换按数据长度增加的方向进行,以保持精度不被降低。

有布尔型参与运算时,TRUE将转化为整型1,FALSE将转化为整型0后再参与运算有NULL值参与运算时,NULL值转化为整型0再进行运算。有integer型和float型参与运算时,先把integer型变量转成float类型后再进行计算有字符串和数字型(integer,float)数据参与运算时,字符串先准换为数字,再参与运算,字符串先转换为数字,再参与运算。转化后的数字是从字符串开始的数值型字符串,如果字符串开始的数值型字符串不带小数点则转为integer类型数字。如果带有小数点,则转为float类型的数字,例如,字符串"123abc"转为整数123,字符串"123.454abc"转为浮点数123.454,字符串"abc"转为整数0

转载于:https://my.oschina.net/syc2013/blog/176193

你可能感兴趣的文章
检查磁盘利用率并且定期发送告警邮件
查看>>
MWeb 1.4 新功能介绍二:静态博客功能增强
查看>>
linux文本模式和文本替换功能
查看>>
Windows SFTP 的安装
查看>>
摄像机与绕任意轴旋转
查看>>
rsync 服务器配置过程
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
Elasticsearch增删改查
查看>>
oracle归档日志增长过快处理方法
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
SqlServer作业指定目标服务器
查看>>
UnrealEngine4.5 BluePrint初始化中遇到编译警告的解决办法
查看>>
User implements HttpSessionBindingListener
查看>>
抽象工厂方法
查看>>
ubuntu apt-get 安装 lnmp
查看>>
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>