Мы планируем перейти на сервер PHP7 и проводим некоторые проверки совместимости с существующим кодом веб-сайта. Одна из найденных проблем связана со следующей функцией и побитовым сдвигом на отрицательное число.
Видимо, это приведет к ошибкам в 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));
}
Задача ещё не решена.
Других решений пока нет …