HHVM 4.102 发布,高速开源虚拟机
HHVM 4.102 正式发布,这个版本的发布就标志着对 4.96 的支持已经结束。HHVM 4.97-4.101 以及 4.56 LTS 和 4.80 LTS 版本仍然受到支持。
重大变化
- 现在在接口上声明的方法上能够正确地强制使用
<<__Override>>(以前只在类和 traits 中声明的方法上执行)。如果属性被用于接口方法上,而该方法并未在任何接口的父接口上声明,则类型检查器将引发一个错误; - 如果在 trait 中声明的
protected方法被从无效的上下文中调用,typechecker 现在会正确地引发一个错误。以前,类型检查器存在一个 bug,即允许从任何使用相同 trait 的类中调用protected方法,即使它不是目标类的子类或父类。这样的调用会导致运行时错误,但以前类型检查器不会发现。
未来的变化
- 今后,对非数值类型(除
int和float以外的所有类型)的值使用任何算术运算符(+, -, *, /, %, ),都会导致在运行时抛出异常。所有这些情况都会引起类型检查器错误。- 同样的规则也适用于各自的赋值运算符(
+=、*=等); - INI 选项
hhvm.notice_on_coerce_for_math=2现在可以用来启用的未来行为(设置为1会引发一个通知而不是抛出一个异常); - 类似的限制也适用于增量和减量运算符 (
$i++,-$i)。INI 选项hhvm.notice_on_coerce_for_inc_dec可以用来启用这些未来的行为(设置为1表示通知,2表示异常)。
- 同样的规则也适用于各自的赋值运算符(