PHP值怎么可能包含长度为零、不等于空字符串或null的字符串?

PHP值怎么可能包含长度为零、不等于空字符串或null的字符串?,php,string,null,strlen,Php,String,Null,Strlen,我正在从内部存储中检索一些数据,如果失败,我会得到非常具体的响应。对此变量调用strlen(),将返回零的值。它也不等于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 len

我正在从内部存储中检索一些数据,如果失败,我会得到非常具体的响应。对此变量调用
strlen()
,将返回零的值。它也不等于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");
}

此结果输出的
数据长度为零
。变量可能包含长度为零、非空且不是空字符串的内容?

返回值必须为false

 echo strlen(false); // outputs 0 
试试这个:

    $data = false;

我不知道为什么false有一个strlen,但它有。

这可能不是答案。我只能在您提供
var\u dump($data)时回答
但我觉得让我吃惊的是:

$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";
}
输出:
发生了奇怪的事情


:)

回显$data时会发生什么?
var\u dump($data)去营救。所以它是什么?它是一只鸟!这是一架飞机。。。不,这只是兰斯洛特。
否则如果($data==”)
我认为三个等号与类型匹配,而不是像冈尔所说的字符串。
$data
可能不是类型
string
false
。字符串中的ASCII空字符与PHP二进制字符串的美不一样<代码>\0
strlen()
的1个。。。史诗!PHP没有字符串,只有字节数组。你可以把任何东西粘在里面,
\0
对它没有影响:)
strlen
更像是
count
@MarkBaker我知道,但我希望strlen为零。Thx代码愤怒!!!当然你是对的,我们不是在C!!对不起,我完全错了。。。。一旦你们都读了我的文章,我就会删除这篇文章comment@hek2mgl你可以把它放在这里,以便其他人可以阅读我的评论,以防他们来自像我这样的C/C++背景:)我非常讨厌动态类型语言,因为任何东西都是其他东西。@code对动态类型语言感到愤怒。我并不讨厌他们,但我和你一样,松散的打字带来的问题比它带来的好处更多$data=0;但是,不会给出相同的结果。它有一个
strlen
,原因与您可以添加两个字符串(
“aa”+“bb”
)或
str_replace(0,null,false)
:值会自动转换为消费者想要的任何类型。另一个问题是,结果可能没有意义。