整形处理变更
1. 无效的八进制字面量将产生编译错误.
比如, 以下表达式不再合法:
$i = 0781; // 8 is not a valid octal digit!
之前不合法的数字(与后继的所有合法数字)会被简单的忽略. $i 之前值是7, 因为后两位数字会被静默丢弃.
2. 位移负数现在会抛ArithmeticError.
var_dump(1 >> -1);
// ArithmeticError: Bit shift by negative number
3. 左移超过整形位数总是返回0.
var_dump(1 << 64); // int(0)
之前以上代码的行为取决于CPU架构. 例如, x86(包括x86-64)架构下返回int(1), 因为位移操作会回绕.
4. 类似的, 右移超过整形位数总是返回0或者-1(取决于正负):
var_dump(1 >> 64); // int(0)
var_dump(-1 >> 64); // int(-1)
Relevant RFC: integer_semantics