我们希望切换到PHP7服务器,并对网站的现有代码运行一些兼容性检查。发现的问题之一是具有以下功能,而Bitwise按负数移位。
显然这会在PHP7中引发错误。我承认我并不完全理解这个算法是如何工作的,但我想知道是否有人建议如何修改函数#1维护功能,#2符合PHP7。
/**
* Right shift with zero fill.
*
* @param integer $a number to shift
* @param integer $b number of bits to shift
* @return integer
*/
public function zeroFill($a, $b){
return ($a >= 0) ? ($a >> $b) : ($a >> $b) & (PHP_INT_MAX >> ($b - 1));
}
答案 0 :(得分:0)
当未按正常预期进行数学计算时引发ArithmeticError,在这种情况下,这可能导致值超出整数的可能范围。 (See documentation here)
您的函数已经在对此进行验证,并限制了PHP_INT_MAX的操作,因此在那里没有问题。
要删除验证插件抛出的警报消息,您需要用try / catch块覆盖该函数,以便捕获可能的ArithmeticError。这样,功能将像:
public function zeroFill($a, $b){
try {
return ($a >= 0) ? ($a >> $b) : ($a >> $b) & (PHP_INT_MAX >> ($b - 1));
} catch(ArithmeticError $error) {
// Do your logic to treat this kind of error
}
return $a; // Or return something you would want
}
此外,使用str_pad总是一个不错的选择。