PHP 类型判断和NULL,空值检查
判断变量是否为NULL
在PHP中要判断一个变量是否NULL有很多方式:
is_null VS isset
这两个函数都可以来判断一个变量是否为NULL,它们对空字符串,0,false的认同是一样的。即is_null=! isset()。
但是isset是语法结构,is_null是函数。在性能上,语法结构相对要优秀一点。所以很多地方都推荐使用isset来代替is_null的使用。
== VS ===
在有些情况下,推荐使用isset来判断一个变量是否为NULL。
但是从语义上来说,一个变量”是否已显示初始化“和”是否为NULL“是不同的概念,在某些场景下使用isset是不合适的,比如检查一个函数的返回值是否为NULL。
此时可以使用"=="和”===“来判断它们是否为NULL。
对于"=="和”===“,它们直接的区别还是很大。对于"==",它认同空字符串,0,false都为NULL。而对于"===",只有一个变量真的为NULL,它才代表NULL。
另外"==="相对于"isset"来说,性能基本接近,甚至要好点。
因此综上述,判断一个变量是否为NULL最好的办法就是直接使用"===",这样就不用在is_null,isset之间犹豫。其实上述的结论也同理于False的判断。
empty()函数的认识
在判断变量是否为NULL时候,也会把empty这个函数拿来和isset之类的一起讨论。其实这个函数没有必要和他们进行比较,因为它代表的意思很简单,它的意思就是判断一个变量所存储的内容是否为零或者为空,而这里的空不仅仅是NULL。那么有哪些内容代表零或者空的概念呢?""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,都代表了为零。
如果e=NULL,它肯定是空,即empty(
e是int类型,
e)=true;
如果e="",相对于字符串,”“就代表为是空,即empty(
e是string类型,
e)=true;
如果e=false,相对true,false就代表为空,即empty(
e是array类型,
e)=true;