Heim >Backend-Entwicklung >PHP-Tutorial >php 语法里0不等于null为空的解决方法

php 语法里0不等于null为空的解决方法

WBOY
WBOYOriginal
2016-06-13 12:13:371817Durchsuche

php 语法里0不等于null为空的解决办法

今天做信息收集页面时遇到一个奇怪的问题,研究了好久才发现问题的根源,的确是有点怪异。
(小弟常使用的是 C# , java 等语言, php只是偶尔在用,不是研究很深)。请各位资深php程序员别见笑 

问题是这样的: php 语句里 (0 !=null && 0 >=0), 返回的结果为空,这点真的好奇怪。


实验总结:
php 语句如下:

$index=0;

echo "A: ".$index."
";  //0

echo  "B: ".($index !=null && $index >=0)."
";//
echo "C: ".(isset($index) && $index >=0)."
";//1

echo  "D: ".(0 !=null)."
";//

结果: 

A: 0
B: 
C: 1
D:    
可见: 0!=null的结果为空. 要使结果正确,可以修改为 $index !=null 修改成   isset($index)

if(isset($index) && $index >=0))
{
echo "包含. ";
}else{
echo "不包含. ";
}


这个很奇怪,终于解决了。Mark 一下。

其它资料:

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

原因是在PHP中变量是以C语言的结构体来存储的,空字符串和NULL,false都是以值为0存储的,其中这个结构体有个zend_uchar type;这样的成员变量,他是用来保存变量的类型的,而空字符串的类型是string,NULL的类型是NULL,false是boolean。

这一点可以用echo gettype('');和echo gettype(NULL);来打印看看!而===运算符是不单比较值,还有比较类型的,所以第三个为false!


另外再说下,php中 

=     一个等号是赋值

==    两个等号是判断相等且只比较值,不比较类型

===   三个等号是判断值和类型都相等

!=    不等于符号,只比较值,不管类型

!==   不全等符号,比较值和类型


所以 空字符串(''),false, NULL 和 0是值相等而类型不一样!

注意:

NULL是一种特殊的类型.
两种情况下为NULL
1. $var = NULL;
2. $var;

3.""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。

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


本文地址:http://blog.csdn.net/aerchi/article/details/42773459

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn