php 尝试在 string/chr 中设置位时发出警告

php warning when trying to set a bit in a string/chr

我用下面的代码设置了一点。这在 php5.

中运行良好
function setbit($pos) {
    return (1 << $pos);  
}
$test = chr(0);
$test += setbit(2);
print_r($test);
//result 4

自从升级到 php7 现在我收到错误警告:遇到非数字值。 $test 的输出仍然是 4,这是正确的。

我理解错误。这是因为 $test 是一个字符串,而我的 setbit 函数返回一个整数。 就像我说的那样,这在 php5 中运行良好,但现在在 php7.

中不起作用

$test 必须保留一个字符串,因为我稍后会在代码中执行一些字符串操作 例如

$test = chr(3);

我知道我可以关闭 php_ini 中的警告,但我宁愿解决问题也不愿隐藏它。 有没有办法在不关闭警告的情况下在 php7 中进行这项工作?

在字符中设置位的最佳方法是创建一个掩码,然后使用位运算符 |将角色与面具相关联。

 /* 
  * set a bit to first char of string $str
  * @param string $str
  * @param $bitPos 0..7
  * @return string, false if error
  */  
  function setBit($str, $bitPos){
    if($bitPos < 0 OR $bitPos > 7) return false;
    return $str |= chr(1<<$bitPos);
  }

使用示例

$test = chr(0);
$test = setBit($test,0);
//or $test = setBit(chr(0),0);
echo bin2hex($test)."<br>\n";  //01

$test = setBit($test,1);
echo bin2hex($test)."<br>\n";  //03