PHP7按位数按位移位会在PHP

时间:2017-05-18 18:17:23

标签: php bitwise-operators php-7

我们希望切换到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));
}

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总是一个不错的选择。