只有第一个字节会被分配给字符串偏移警告
Only the first byte will be assigned to the string offset warning
刚迁移到PHP8,就出现了这个错误;你知道如何解决这个问题吗?
PHP Warning: Only the first byte will be assigned to the string offset
它出现在这两行中:
if( !isset($value[1]) ) $value[1] = 'NULL' ;
if( !isset($value[2]) ) $value[2] = 'NULL' ;
这是围绕它们的代码:
foreach ($chars as $value) {
if( !isset($value[1]) ) $value[1] = 'NULL' ;
if( !isset($value[2]) ) $value[2] = 'NULL' ;
if (!is_null($value[1])) {
$newstring = "?" . $value[1];
}
if ($value[2] !== null) {
$newstring = $newstring . '&' . $value[2];
}
}
错误消息的关键部分是短语“字符串偏移量”;它告诉你 $value[1]
不是指数组中的元素,而是字符串中的字符。
让我们构建一个最小的示例:
$value = 'hello world';
$value[1] = 'NULL' ;
var_dump($value);
这里,$value
是一个字符串,所以$value[1]
指的是“字符串偏移量1”处的字符,即e
.
我们可以重写那个字符,但只能使用不同的单个字符。所以 PHP 忽略 ULL
,保留 N
,结果是 string(11) "hNllo world"
.
此代码 hasn't changed since at least PHP 4.3 的实际行为,PHP 8 中唯一的新内容是额外的消息,表明它可能不是您想要做的 - 您为什么要写 'NULL'
如果您只需要 'N'
?
在这种特殊情况下,原始代码很可能期望 $value
是一个数组,并且以某种方式获取了一个字符串(在显示的循环中,$chars
应该是一个数组数组,而是一个字符串数组)。我们看不到更广泛的上下文,因此无法知道您的修复需要在哪里。
刚迁移到PHP8,就出现了这个错误;你知道如何解决这个问题吗?
PHP Warning: Only the first byte will be assigned to the string offset
它出现在这两行中:
if( !isset($value[1]) ) $value[1] = 'NULL' ;
if( !isset($value[2]) ) $value[2] = 'NULL' ;
这是围绕它们的代码:
foreach ($chars as $value) {
if( !isset($value[1]) ) $value[1] = 'NULL' ;
if( !isset($value[2]) ) $value[2] = 'NULL' ;
if (!is_null($value[1])) {
$newstring = "?" . $value[1];
}
if ($value[2] !== null) {
$newstring = $newstring . '&' . $value[2];
}
}
错误消息的关键部分是短语“字符串偏移量”;它告诉你 $value[1]
不是指数组中的元素,而是字符串中的字符。
让我们构建一个最小的示例:
$value = 'hello world';
$value[1] = 'NULL' ;
var_dump($value);
这里,$value
是一个字符串,所以$value[1]
指的是“字符串偏移量1”处的字符,即e
.
我们可以重写那个字符,但只能使用不同的单个字符。所以 PHP 忽略 ULL
,保留 N
,结果是 string(11) "hNllo world"
.
此代码 hasn't changed since at least PHP 4.3 的实际行为,PHP 8 中唯一的新内容是额外的消息,表明它可能不是您想要做的 - 您为什么要写 'NULL'
如果您只需要 'N'
?
在这种特殊情况下,原始代码很可能期望 $value
是一个数组,并且以某种方式获取了一个字符串(在显示的循环中,$chars
应该是一个数组数组,而是一个字符串数组)。我们看不到更广泛的上下文,因此无法知道您的修复需要在哪里。