在PHP正确的解决方案中发生了字符串偏移

时间:2016-04-30 07:02:48

标签: php string

关于以下函数,我收到错误

  

'字符串偏移演员发生'

protected function setBitAtPosition($pos) {
    list($char, $byte) = $this->position2CharAndByte($pos);
    // Error Notice :  String offset cast occurred in ....
    $this->bitField[$char] = $this->bitField[$char] | $byte;
}

protected function getBitAtPosition($pos) {
    list($char, $byte) = $this->position2CharAndByte($pos);
    // Error Notice :  String offset cast occurred in ....
    return ($this->bitField[$char] & $byte) === $byte;
}


var_dump($this->position2CharAndByte($pos));
array(2) {
  [0] =>
  double(9552303)
  [1] =>
  string(1) "Ç"
}

从PHP 5.4开始,字符串偏移必须是整数或类似整数的字符串,否则会抛出警告。

正确的解决方案是转换为像这样的整数

$this->bitField[(int)$char] = $this->bitField[(int)$char] | $byte;

return ($this->bitField[(int)$char] & $byte) === $byte;

1 个答案:

答案 0 :(得分:2)

解决方案是将$char投射到int;虽然double具有相同的值,但PHP明确预期自5.4以来的整数。修复方法是让position2CharAndByte返回int而不是double,将其投放到position2CharAndByte的调用者中需要不必要的代码重复。 (*咳嗽* fixed *咳嗽*)。