Source Code Fundamentals: Program Structure

一个 Hack 程序包含一个或多个源文件,这些源文件的扩展名应为 .hack,并包含以下一个或多个类型的声明(无须按以下顺序):

  • 别名声明
  • 枚举类型
  • 函数
  • 包含指令
  • 接口
  • 命名空间
  • trait
  • use

参考以下代码:

#!/usr/bin/env hhvm
namespace Hack\UserDocumentation\Fundamentals\ProgramStructure\Examples\HelloWorld;

<<__EntryPoint>>
function main(): void {
  print("Hello, World!\n");
}
Output
Hello, World!

在这个例子中,启动函数被定义为 main,但实际上,你可以用任意一个名字,例如 rundo_it 或者是 make_magic 都可以(让 main 成为启动函数的是__EntryPoint 属性

包含其他文件

一个文件可以通过包含来导入其他文件。

旧版文件

在以前的 Hack 代码文件,可能还用着 .php 扩展名,但是在新的 Hack 代码中,不推荐使用这个扩展名了。如果 Hack 代码还是继续用 .php 扩展名的话,则必须在第一行中加入 shebang(例如 #!/usr/bin/env hhvm),然后才是起始标记行。起始标记可以是以下任意一种:

  • <?hh // strict:这是目前推荐的起始标记,会使得 Hack 代码在严格模式运行
  • <?hh // partial:放宽了一些限制,以降低从其他语言迁移过来的成本,强烈不建议用在新的项目中。
  • <?hh:取决于 HHVM/Hack 的版本,可能等同于 strict 或者是 partial,也可能会直接抛一个错误。强烈不建议将这种写法用在新的以及现有的代码上面。
  • <?hh // decl:不再被支持

下面的代码等同于之前的例子:

#!/usr/bin/env hhvm
<?hh // strict
namespace Hack\UserDocumentation\Fundamentals\ProgramStructure\Examples\LegacyHelloWorld;

<<__EntryPoint>>
function main(): void {
  print("Hello, World!\n");
  exit(0);
}
Output
Hello, World!

本节由 Y!an 翻译