Facebook发布的Hack语言是一个运行在HHVM上的语言,在PHP的基础上添加了静态类型检查和一些现代编程语言的特性。
类型标记
对于大型项目而言,类型检查可以避免很多问题。
<?hh
classMyClass {
constint MyConst = 0;
privatestring$x = '';
publicfunctionincrement(int$x): int {
$y = $x + 1;
return$y;
}
}
泛型
借鉴了C#和Java
<?hh
classBox<T> {
protected T $data;
publicfunction__construct(T $data) {
$this->data = $data;
}
publicfunctiongetData(): T {
return$this->data;
}
}
nullable类型
?
运算符代表可为空值。
集合
在PHP数组的基础上添加了更丰富的集合类型:
- Vector
- Map
- Set
- Pair
匿名函数
PHP 5.3开始加入了匿名函数支持,但是和大多数语言不同,匿名函数内需要访问外层的变量的话,需要事先使用use
声明。
function ($quantity, $product) use ($tax, &$total)
{
$pricePerItem = constant(__CLASS__ . "::PRICE_" .
strtoupper($product));
$total += ($pricePerItem * $quantity) * ($tax + 1.0);
};
Hack改进了PHP的匿名函数:
<?hh
functionfoo(): (function(string): string) {
$x = 'bar';
return$y ==> $x . $y;
}
functiontest(): void {
$fn = foo();
echo$fn('baz'); // barbaz
}
其他特性
- 静态动态分离的方法分发
- 覆盖父类方法必须声明
- XHP,输出HTML和XML时自动过滤XSS
- 改进了trait
- Continuas
- 代码必须在函数或类之内
- 方法名不能呢给和类名一样
- 不允许调用父类的静态方法
- 不允许静态调用对象
- 异步编程