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


思否编辑部
4.3k 声望116.9k 粉丝

思否编辑部官方账号,欢迎私信投稿、提供线索、沟通反馈。