天天看点

《Hack与HHVM权威指南》——1.6.1 没有类型的变量

在大多数静态类型的语言之中,一个本地变量出现后就会被定义为某种类型。然后,这个变量将在整个生命周期内保存这种类型的值。本例中的代码可以是c++或者java,不论哪种情况,这里都会引发一个类型错误。因为x被声明为一个int类型,所以永远不能把非int类型的值赋值给它:

int x = 10;

x = "a string"; // 错误

这并不是一个hack中的例子,就像php一样,本地变量在hack中可以不用声明类型,你可以简单地通过赋一个值给它来创建一个本地变量。你还可以对任何本地变量赋值新的值,而不用在意这个本地变量原本的类型是什么:

$x = 10;

$x = "a string"; // 正确

关键的不同点是:在hack中,本地变量本身是没有类型的,它所存放的值是有类型的。

在本程序中的每个点上,类型检查器都知道在那个点每个变量所存放的值的类型。如果它发现一个新的值被赋给了这个变量,那么它将及时更新关于这个变量存放的值类型的知识点。

继续阅读