'out of range offset'是什么意思,何时"仅使用分配字符串的第一个字符"?



我正在使用PHP 7.2.2

我无法理解以下摘自PHP手册的段落

警告写入超出范围的偏移量会用空格填充字符串。 非整数类型将转换为整数。非法偏移类型发射E_NOTICE。仅使用已分配字符串的第一个字符。如 在 PHP 7.1.0 中,分配空字符串会引发致命错误。 以前,它分配了一个 NULL 字节。

我对上述段落有以下疑问/问题:

  1. 这里的"超出范围偏移"到底是什么意思?
  2. 其非整数类型转换为整数。它是偏移量还是正在考虑的字符串中的字符,其类型转换将要发生?
  3. "非法偏移类型"到底是什么意思?
  4. 何时"仅使用分配字符串的第一个字符"?
  5. 再见最后一句"以前,它分配了一个 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"字节,例如$x[0] = ''会致命的。

下面是一个字符串,例如:$string = 'word';

在 PHP 中,字符串是一个字节数组。您可以通过数字索引引用字符串中的特定字符(字节)。如果偏移量介于0(第一个字符)和strlen($string) - 1(最后一个字符)之间,则偏移量在范围内。

此示例使用索引 0 到 3 循环访问字符串中的字符。

$len = strlen($string);
for ($i=0; $i < $len; $i++) {
$char = $string[$i];
var_dump($i, $char);
}

超出范围的偏移量是超出 strlen - 1 的任何索引。此代码将生成一个通知:

$char = $string[4];
var_dump($char);    // string ''

注意:未初始化的字符串偏移量:4

使用非整数类型作为索引会将类型转换为整数。此示例中的字符串foo(非法偏移类型)将转换为0,因此字符串的第一个字符将被替换。

$string['foo'] = 'c';
var_dump($string); // string 'cord'

如果尝试为字符串分配多个字符,则仅使用其第一个字符,如果尝试分配给单词末尾以外的索引,则间隙索引将填充空格。

$string[5] = 'something';
var_dump($string);         // string 'cord s'

相关内容

  • 没有找到相关文章

最新更新