Facebook发布的Hack语言是一个运行在HHVM上的语言,在PHP的基础上添加了静态类型检查和一些现代编程语言的特性。
类型标记
对于大型项目而言,类型检查可以避免很多问题。
<?hh
class MyClass {
const int MyConst = 0;
private string $x = '';
public function increment(int $x): int {
$y = $x + 1;
return $y;
}
}
泛型
借鉴了C#和Java
<?hh
class Box<T> {
protected T $data;
public function __construct(T $data) {
$this->data = $data;
}
public function getData(): 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
function foo(): (function(string): string) {
$x = 'bar';
return $y ==> $x . $y;
}
function test(): void {
$fn = foo();
echo $fn('baz'); // barbaz
}
其他特性
- 静态动态分离的方法分发
- 覆盖父类方法必须声明
- XHP,输出HTML和XML时自动过滤XSS
- 改进了trait
- Continuas
- 代码必须在函数或类之内
- 方法名不能呢给和类名一样
- 不允许调用父类的静态方法
- 不允许静态调用对象
- 异步编程
相关链接
编撰 SegmentFault
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。