''、null、false、0? php

在php中对空字符串、空、false、0的区分,特别是在if判断的时候,会让模棱两可的人头疼,在一次面试中我被问道这个问题,我已经记不清到时做出的回答。

 

这里有两个概念,值与类型,虽然说php是弱类型语言但是它是有类型的,通过函数gettype($varname)或者is_typename($varname)系列函数判断函数的类型。然而对于变量值的判断一般通过==两个等于号进行判定。如果要进行类型与值的同时判断通过===三个等号进行。

 

先说一下我已经知道的东西

''  |空字符串  |存储为0|if(''){此处代码不被执行}

'0'|字符串|存储为0|if('0'){此处代码不被执行}

null | 空 | 存储为0|if(null){此处代码不被执行}

false |假 |存储为0|if(false){此处代码不被执行}

于是我更愿意相信在php中的基本数据类型(也就是说不包含对象相关的引用类型)可能会保存在一个类似与C语言结构体的变量里面,在这个结构体变量中有成员变量描述这个php变量的实际的值,在这个结构体变量中有成员变量描述这个php变量的类型。

基于以上言论,在进行php的if条件测试的时候其实默认根据变量的值进行判断条件是否通过比如if('0')、if(null)、if(false)实际测试if(0)于是测试不通过。

同样的在书写代码时候一定要明确自己最想表达的含义,比如 if($foo == '0')这个片段只是想看看$foo这个变量的值是不是等于0,而并不在意$foo这个变量的类型类型是啥。然而这样的代码是没有多少价值的吧,如果进行if测试最好用,同时应该强迫自己用===,即要确定其类型与值,不要给自己那么多模棱两可。

----------------------------------------------------------------------------------------------------------------

that's all .luohaonan@zhengzhou 20170327

 

posted on 2017-03-27 09:15  blbl9527  阅读(68)  评论(0)    收藏  举报

导航


github sina微博 FB