PHP值如何包含一个长度为零的字符串,而不等于空字符串或null?

4

我正在从内部存储中检索一些数据,如果失败,我会得到一个非常具体的响应。在这个变量上调用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");
}

这个结果输出了 数据长度为零。变量可能包含长度为零,不是null也不是空字符串的内容?

当你回显 $data 时会发生什么? - jh314
3
var_dump($data); 来挽救局面。那么,它是什么?它是一只鸟!它是一架飞机!……不,它只是兰斯洛特。 - CodeAngry
1
“false” 可以胜任。 - Jon
看看这个表格,它应该能回答你的问题。 - bitWorking
我肯定没有像应该那样经常使用 var_dump()... 感谢所有的帮助! - Erick Robertson
显示剩余2条评论
3个回答

2
必须返回false值。
 echo strlen(false); // outputs 0 

1
这可能不是一个答案。只有当您提供var_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";
}

输出:something strange happened

:)


字符串中的ASCII NULL字符与NULL数据类型不同。 - Mark Baker
1
PHP二进制字符串的美妙之处。\0strlen()为1... 史诗级! PHP没有字符串,而是字节数组。您可以将任何内容放入其中,\0不会对其产生影响:)strlen更像count - CodeAngry
@MarkBaker 我知道,但我预期的是 strlen 为零。谢谢 CodeAngry!!当然,你是对的,我们不在 C 中!抱歉,我完全错了...只要你们看到我的评论,我就会删除这篇帖子。 - hek2mgl
1
@hek2mgl 你可以把它留在这里,这样其他人就可以阅读我的评论,如果他们像我一样来自C/C++背景:) 我非常讨厌动态类型语言,因为任何东西都可以是其他东西。 - CodeAngry
@CodeAngry 关于动态类型语言。我不讨厌它们,但我同意你的观点,松散的类型带来的问题比它带来的好处更多。 - hek2mgl

0

试试这个:

    $data = false;

我不确定为什么 false 有 strlen,但它确实有。


$data = 0; 不过结果并不相同。 - Dany Caissy
它有一个 strlen 原因是你可以像这样添加两个字符串 ("aa" + "bb") 或者你可以使用 str_replace(0, null, false),这些值会自动转换为其消费者想要的任何类型。另一件事是结果可能没有意义。 - Jon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接