在PHP中,将不同类型的变量转化为判断条件时,究竟发生了什么,这部分内容属于PHP的基础知识中的变量部分,在学习过程中越是基础的东西越是要学习透彻,不然在工作的时候会遇到很多困扰,影响到工作的效率。
研究这个问题首先要明确
- 无论是强类型还是弱类型,变量都具有两个属性:类型和值,只不过强类型的语言的变量需要申明,而弱类型语言无需声明,但这并不意味着弱类型语言的变量没有类型的概念了。举例来说,PHP的gettype方法就是返回该变量“当前”的类型。
- PHP变量的类型是可以随需一直改变的,比如字符串可以和数字相加。弱类型有时显得很方便,有时却又极易出错。
本文研究的内容属于实际工作最常出现的一种情况,即直接用变量作为流程判断的条件,例如:
//$condition 可能为null或者空数组
if($condition){
echo 'true';
}else{
echo 'false';
}
//或者
//$condition2 可能为0或者false
if(empty($condition2)){
echo 'true';
}else{
echo 'false';
}
在以上情况下程序是否能如你所愿的执行呢,相信大家看完之后一定会有所收获。还有其他一些复杂的情况因为在实际开发中很难遇到,我只会在文章最后留一个类似脑筋急转弯的程序问题,大家可以一起讨论一下。
研究方法
将false、空字符串、null、空数组、0和空格,这六个值分别使用is_null、empty、isset、(bool)、(int)进行处理,观察其结果。用于测试的PHP版本为5.6。
在研究之前,我直接先把结论放给大家。如果看完我总结的结论,和你所了解的有冲突,那么就可以仔细看一下研究的过程,纠正自己的错误。如果结论和你所知道的相同,那么可以直接跳到结尾的脑经急转弯和我一起讨论一下答案。
结论
- null等同于未定义,只有使用is_null对其判断时返回ture
- 仅当有内容时(空格也算内容),对其使用empty判断,返回true
- 仅当null或未定义时,使用isset判断,返回false
- 转化bool值的规律和empty判断正好相反
- 无论何种情况以上值都会被int转化为0
研究过程
最后的小问题
请输出该结果
echo '6+5' . 9+7;
echo ('1+1' . 1)+(1 . '1+1' . 1)+1;
欢迎大家留言讨论下,一定要先思考并得出自己的答案,再用程序去验证,结果一定会让你觉得很有趣。