在PHP中,将不同类型的变量转化为判断条件时,究竟发生了什么

今天和大家一起来研究一下,在PHP中,将不同类型的变量转化为判断条件时,究竟发生了什么,这部分内容属于PHP的基础知识中的变量部分,在学习过程中越是基础的东西越是要学习透彻,不然在工作的时候会遇到很多困扰,影响到工作的效率。

在PHP中,将不同类型的变量转化为判断条件时,究竟发生了什么

研究这个问题首先要明确

  1. 无论是强类型还是弱类型,变量都具有两个属性:类型和值,只不过强类型的语言的变量需要申明,而弱类型语言无需声明,但这并不意味着弱类型语言的变量没有类型的概念了。举例来说,PHP的gettype方法就是返回该变量“当前”的类型。

  2. 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。

在研究之前,我直接先把结论放给大家。如果看完我总结的结论,和你所了解的有冲突,那么就可以仔细看一下研究的过程,纠正自己的错误。如果结论和你所知道的相同,那么可以直接跳到结尾的脑经急转弯和我一起讨论一下答案。

结论

  1. null等同于未定义,只有使用is_null对其判断时返回ture

  2. 仅当有内容时(空格也算内容),对其使用empty判断,返回true

  3. 仅当null或未定义时,使用isset判断,返回false

  4. 转化bool值的规律和empty判断正好相反

  5. 无论何种情况以上值都会被int转化为0

研究过程

在PHP中,将不同类型的变量转化为判断条件时,究竟发生了什么

星号内为当前测试的样本,不同方式处理后的结果在其下方显示

最后的小问题

请输出该结果

echo '6+5' . 9+7;

echo ('1+1' . 1)+(1 . '1+1' . 1)+1;

大家一定要先思考并得出自己的答案,再用程序去验证,小编保证结果很有趣。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: