《Hack与HHVM权威指南》——1.5.4 可变参数类型

简介:

本节书摘来自华章出版社《Hack与HHVM权威指南》一书中的第1章,第1节,作者 Owen Yamauchi,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.5.4 可变参数类型

正如我们早期看到的一样,Hack拥有声明某个函数是可变参数的语法:

function log_error(string $format, ...) {
  $args = func_get_args();
  // ... 
}

PHP 5.6介绍了一个不同的可变参数的语法,它有两个特性超过了Hack。它自动把可变参数打包成数组,允许对可变参数进行类型提示。

function sum(SomeClass ...$args) {
  // $args 是一个SomeClass对象的数组
}

这个语法在Hack中也是存在的。类型检查器支持这个语法,并且类型检查过程中可以正确调用这种函数。HHVM也支持这种语法,但是不支持类型标注。HHVM并不支持检查可变参数值的类型。当它发现对一个可变参数进行类型标注的时候,会产生一个致命错误,目的在于避免给人留下该类型标注有一定效果的印象。
这就产生了一个冲突点。在严格模式下,Hack的类型检查器不会允许一个参数没有类型标注,即使是个可变参数。但是HHVM又不运行对可变参数进行类型标注的代码。
这里有两种用于解决该冲突的可能方案:
忽略类型标注,并且使用局部模式。
忽略类型标注,使用严格模式,并且添加一个HH_FIXME[4033]的注释信息(详情请见3.11节)。这是个推荐的解决方案,因为严格模式总是比局部模式应该受到推荐

相关文章