我正在使用PHP 7.2.2
我无法理解以下摘自PHP手册的段落
警告写入超出范围的偏移量会用空格填充字符串。 非整数类型将转换为整数。非法偏移类型发射E_NOTICE。仅使用已分配字符串的第一个字符。如 在 PHP 7.1.0 中,分配空字符串会引发致命错误。 以前,它分配了一个 NULL 字节。
我对上述段落有以下疑问/问题:
- 这里的"超出范围偏移"到底是什么意思?
- 其非整数类型转换为整数。它是偏移量还是正在考虑的字符串中的字符,其类型转换将要发生?
- "非法偏移类型"到底是什么意思?
- 何时"仅使用分配字符串的第一个字符"?
- 再见最后一句"以前,它分配了一个 NULL 字节"是什么意思?具体来说,空字节是什么意思?
有人可以用易于理解的语言和合适的工作代码示例回答我的所有疑问/问题吗?
手册的这一部分是指将字符串视为字符数组。
-
"超出范围"偏移量是指整数索引的位置比字符串本身当前的位置长,例如
$x = "foo"; $x[10] = 'o';
导致$x
变得foo o
如果使用非整数索引值, 则在访问字符串的索引之前将索引值转换为整数,例如
$x = "foo"; $y = $x[true];
的结果是$y
取$x[1]
的值 -o
非法偏移类型是通常不能用作数组偏移量的任何类型,例如
class Foo() {}
- 使用$x[new Foo()];
为字符串编制索引会引发警告第一个 chracter 片段意味着,如果您尝试将字符串分配给现有字符串的索引,则只会使用已分配字符串的第一个字符,例如
$x = "foo"; $x[0] = "hi";
导致$x
变得hoo
;现在,在索引处为字符串分配空字符串值会导致错误,而不是分配"null"字节