''、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
浙公网安备 33010602011771号