为什么$ string [0] =''没有结果$ string [0] ===''?

时间:2014-11-05 07:28:10

标签: php

$s = 'abc';
$s[0] = '';
if ($s[0] !== '') {
    echo 'emmm';
}

为什么$ string [0] =''不会产生$ string [0] ===''?

好像是$ string [0] ===“\ 0”,但更令人困惑..

4 个答案:

答案 0 :(得分:4)

The manual确实指明了会发生什么:

  

写入超出范围的偏移量填充带有空格的字符串。非整数类型转换为整数。非法偏移类型会发出E_NOTICE。负偏移在写入时发出E_NOTICE但读取空字符串。仅使用指定字符串的第一个字符。 分配空字符串指定NULL字节。

(强调补充)

$str[42] = ..表示法恰好用一个字节替换字符串中的一个字节。所有特殊情况都在手册中注明,如同分配任何内容(空字符串)的情况一样,在这种情况下会分配NUL字节。

答案 1 :(得分:2)

$s[0]可以访问字符串的单个字符。 ''不是字符,它是字符串,因此分配失败。如果您尝试将FALSE分配给$s[0],则会获得完全相同的行为。看起来PHP会尽力将您分配的任何值转换为单个字符。如果指定非空字符串,它将使用第一个字符。如果您指定一个数字,它将使用第一个数字。如果您指定值TRUE,则会使用1

答案 2 :(得分:0)

Why $string[0] = '' is not resulting $string[0] === ''?

因为在这种情况下,空字符串将替换为ASCII代码NULL-byte\0ASCII 00x00)。当您使用空字符串设置字符串的一部分时,它将替换为0x00

如果你想比较可空字节,试试这个:

if ($s[0] !== chr('0')) {
# or
if ($s[0] !== "\0") {

答案 3 :(得分:-1)

当你设置$ s [0] ==''时,字符串已经改变,它是'\ 0bc',你知道'\'只在'\ n'之间转义,所以它是“\ 0”而不是'\ 0' ,''表示\ 0。