【问题标题】:How could a PHP value contain a string of zero length not equal to the empty string or null?PHP 值如何包含一个长度为零的字符串,不等于空字符串或 null?
【发布时间】:2013-07-11 22:13:04
【问题描述】:

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

此结果正在输出data was length zero。变量可以包含什么长度为零、不为空且不是空字符串?

【问题讨论】:

  • 回显 $data 时会发生什么?
  • var_dump($data); 来救援。那么……那是什么? 这是一只鸟!这是一架飞机! ...不,只是兰斯洛特。
  • else if ($data == "") 我认为三个等号匹配类型而不是字符串
  • 就像 gunr 说的那样..$data 可能不是string 类型
  • false 符合要求。

标签: php string null strlen


【解决方案1】:

那么返回值一定是假的。

 echo strlen(false); // outputs 0 

【讨论】:

    【解决方案2】:

    这可能不是答案。如果您提供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 datatype 不同。
    • PHP 二进制字符串之美。 \0 有 1 个 strlen()... EPIC! PHP 没有字符串,而是字节数组.您可以在其中粘贴任何东西,\0 对其没有影响:) strlen 更像count
    • @MarkBaker 我知道,但我预计 strlen 为零。 Thx 代码愤怒!!!当然你是对的,我们不在 C 中!对不起,我完全错了.... 将在你们阅读我的评论后立即删除该帖子
    • @hek2mgl 你可以把它留在这里,这样其他人可以阅读我的评论,以防他们像我一样来自 C/C++ 背景 :) 我非常讨厌动态类型语言,因为它什么都不是。跨度>
    • @CodeAngry 关于动态类型语言。我不讨厌他们,但我支持你,松散的打字带来的问题多于带来的好处
    【解决方案3】:

    试试这个:

        $data = false;
    

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

    【讨论】:

    • $data = 0;但是,不会给出相同的结果。
    • 它有一个strlen,原因与您可以添加两个字符串("aa" + "bb") 或str_replace(0, null, false) 的原因相同:值会自动转换为消费者想要的任何类型。结果可能没有意义是另一回事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多