2013-07-11 24 views
4

我从内部商店检索一些数据,如果失败,我会得到一个非常具体的回复。在此变量上调用strlen()将返回零值。它也不等于NULL或“”。我使用这个代码来测试:PHP值如何包含零长度的字符串不等于空字符串或null?

if ($data === NULL) 
{ 
    echo("data was null\n"); 
} 
else if ($data === "") 
{ 
    echo("data was empty string\n"); 
} 
else if (strlen($data) == 0) 
{ 
    echo("data was length zero\n"); 
} 

这一结果是输出data was length zero。什么可以包含这个变量是零长度,不为空,而不是空字符串?

+0

当你回声$的数据会发生什么? – jh314

+3

'var_dump($ data);'来救援。那么......它是什么? *它是一只鸟!这是一架飞机!不,这只是Lancelot。* – CodeAngry

+0

'else if($ data ==“”)'我认为三个等号符合类型不是字符串 –

回答

2

返回的值必须是false然后。

echo strlen(false); // outputs 0 
+0

yes,'var_dump($ data)'echoed'bool(false)'。好决定! –

0

试试这个:

$data = false; 

我不知道为什么假有strlen的,但它确实。

+0

我站在更正'var_dump(strlen(false));'是'0'。 – CodeAngry

+0

$ data = 0;不过,并不能给出相同的结果。 –

+0

它有一个'strlen'出于同样的原因,你可以添加两个字符串('“aa”+“bb”')或者你可以'str_replace(0,null,false)':值自动转换为任何类型他们的消费者要。另一个问题是结果可能没有意义。 – Jon

1

这可能不是一个答案。如果你提出一个var_dump($data);,但我认为还suprising对我来说是这样的,我只能回答:

$data = "\0"; 

if ($data === NULL) 
{ 
    echo("data was null\n"); 
} 
else if ($data === "") 
{ 
    echo "data was empty string\n"; 
} 
else if (strlen($data) == 0) 
{ 
    echo "data was length zero\n"; 
} 
else 
{ 
    echo "something strange happened\n"; 
} 

输出:something strange happened

:)

+0

字符串中的ASCII NULL字符与[NULL数据类型](http://www.php.net/manual/en/language.types.null.php)不同。 –

+1

** PHP的二进制字符串的美丽**'\ 0'的'strlen()'为1 ... * EPIC!* PHP没有字符串,而是字节数组。你可以在它们中粘贴任何东西,'\ 0'对它没有影响:)'strlen'更像'count'。 – CodeAngry

+0

@MarkBaker我知道,但我期望一个零大关。 Thx CodeAngry !!!当然你是对的,我们不在C!对不起,我是完全错误的....只要你们都阅读了我的评论,请立即删除帖子 – hek2mgl