PHP实战PHP经验分享

PHP 变量转换情况汇总

2017-06-26  本文已影响45人  fourn熊能

在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

研究过程

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

最后的小问题

请输出该结果

echo '6+5' . 9+7;
echo ('1+1' . 1)+(1 . '1+1' . 1)+1;

欢迎大家留言讨论下,一定要先思考并得出自己的答案,再用程序去验证,结果一定会让你觉得很有趣。

上一篇下一篇

猜你喜欢

热点阅读