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
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的匿名函數:
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
- 代碼必須在函數或類之内
- 方法名不能呢給和類名一樣
- 不允許調用父類的靜态方法
- 不允許靜态調用對象
- 異步程式設計