2013-07-11 56 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