所以我很高兴能够进入一些Hacklang和HHVM,并最终设法让它在CentOS 6 VM上运行(提示:servergrove.com从他们的回购中获得了一个RPM,但它仍然需要MySQL 5.0共享库才能运行 - 仍然是我能找到的最容易的CentOS 6安装虽然......),我想我会解决一个相当小的PHP项目,作为转换为严格的Hack代码的一个很好的测试用例.
我正在通过代码,但我不认为我完全理解hh_client应该如何工作.我在.hhconfig项目的根目录中创建了一个文件,然后hh_client start从目录运行,它似乎开始正常 - 我看到三个hh_server -d /var/www/html/groundwork进程在执行此操作后运行.不过,我想类型检查我的代码每一次,我都跑hh_client check,在那里作为语言的文档和其他来源的使用不断暗示这应该是一个实时的检查器,自动反馈-我会跑watch hh_client check我猜,但似乎我错过了一些东西.
我确保在hack中获得了普通php函数建议的hhi文件的副本
此外,有时当我启动hh_client时,它会报告事后检查不会发生的事情,尽管代码中没有任何改变.检查错误通常较少.再次停止并启动hh_client报告.
谢谢.
我正在将PHP项目转换为Hack,我遇到了一些障碍.我想要做的是将一个IoC容器从PHP重写为Hack,并且我在通过Hack类型检查工具获取所有内容时遇到了一些麻烦.
基本上我所拥有的是一个容器,它允许您将字符串注册到闭包映射.想法是闭包包含实例化类的逻辑.容器还存储它创建的实例,还允许您强制创建新实例.这是我的容器代码:
<?hh // strict
class Container {
private Map<string, mixed> $instances = Map {};
private Map<string, (function (Container): mixed)> $registered = Map {};
public function register(string $alias, (function (Container): mixed) $closure): void
{
$this->registered[$alias] = $closure;
}
public function get(string $alias): ?mixed
{
if (!$this->registered->contains($alias)) {
return null;
}
$instance = $this->instances->get($alias);
if ($instance !== null) {
return $instance;
}
$closure = $this->registered->get($alias);
if ($closure !== null) {
$this->instances->set($alias, $closure($this));
}
return $this->instances->get($alias);
}
public function getNew(string $alias): ?mixed …Run Code Online (Sandbox Code Playgroud)