天天看點

Hack語言新特性簡介

Facebook釋出的Hack語言是一個運作在 HHVM 上的語言,在PHP的基礎上添加了靜态類型檢查和一些現代程式設計語言的特性。

Hack語言新特性簡介

類型标記

對于大型項目而言,類型檢查可以避免很多問題。

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

相關連結