《Hack与HHVM权威指南》——1.2 设置类型检查器

本节书摘来自华章出版社《Hack与HHVM权威指南》一书中的第1章,第1.2节,作者 Owen Yamauchi,更多章节内容可以访问“华章计算机”公众号查看。

1.2 设置类型检查器

在正式学习Hack类型注解的语法以及语义之前,我们将首先学习如何设置类型检查器。
你需要做的第一件事情就是建立一个.hhconfig文件,这个文件掌控着整个项目范围内的配置项目,它用来标记你的代码库的顶级目录,使得类型检查器能够知晓在它的分析过程中要包含哪些文件。
目前来说,我们还不需要什么配置,.hhconfig文件还是个空文件。所以请译注1导航到你的项目的顶级目录,然后输入下面的代码:
$ touch .hhconfig
$ hh_client
执行hh_client命令将首先检测是否存在hh_server进程,如果没有这个进程,客户端会主动执行一个。所以你不必自己去执行hh_server进程,服务端会去查找.hhconfig文件并且主动去分析.hhconfig文件同级及子目录下面的所有Hack文件。
一个标准的Hack文件的内容必须以<?hh注1开头,这点和 PHP的“开始标记”语法是一致的。在<?hh标记之后(可能会有辅助的模式说明,请参见1.4.1节的“类型检查器模式”的内容),剩下的就是Hack代码的其他内容了。和PHP有所不同的是,结束符?>在Hack语言中是不生效的,所以不能在Hack语言中使用PHP“模板化语言(templating-language)”的语法了。
文件的扩展名无关紧要,按照约定命名为.hh文件或者.php文件都是可以的。
一旦类型检查服务端被启动,如果在你的项目中没有Hack文件(也就是说,你的所有代码都包裹在<?php标记之中而不是<?hh标记之中),运行hh_client将会简单地输出“No Errors!”这是因为类型检查器仅仅查看Hack文件,它对PHP文件不会做任何事情。

时间: 2024-09-20 20:35:09

《Hack与HHVM权威指南》——1.2 设置类型检查器的相关文章

《Hack与HHVM权威指南》——1.7 类型提炼

本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1.7节,作者 Owen Yamauchi,更多章节内容可以访问"华章计算机"公众号查看. 1.7 类型提炼 假设你有个?string类型的值,而且准备把这个值传递给一个参数类型为string的函数.那么你怎么把一个类型(?string)转化为另外一个类型(string)呢?或者假设你有个object类型的值,它可能实现或没有实现Polarizable接口.同时,如果它实现了这个接口,你还希望调用这个ob

《Hack与HHVM权威指南》——1.3 类型标注语法

本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1.3节,作者 Owen Yamauchi,更多章节内容可以访问"华章计算机"公众号查看. 1.3 类型标注语法 本节解释了可以使用类型注解语法的三个地方.当然,我们还没有看到Hack所支持的全部类型,这些内容将会在1.4节进行讲述.现在,你需要知晓的就是int和string是有效的类型标注类型.可以使用类型标注的三个地方分别是函数的返回类型.函数的参数和属性值.

《Hack与HHVM权威指南》——1.6 类型推理

本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1.6节,作者 Owen Yamauchi,更多章节内容可以访问"华章计算机"公众号查看. 1.6 类型推理 类型推理对于Hack的静态类型检查来说是核心内容.就像PHP中一样,本地变量不会被声明为某个类型.然而,得到足够数量的有效覆盖率的关键就在于能够对本地变量的操作进行类型检查.Hack能够无间隙地进行类型推理.类型检查器从一小组从标注或者字面量上的已知类型入手,然后通过操作符和函数调用进行有效的跟踪

《Hack与HHVM权威指南》——2.3 类型消除

2.3 类型消除 泛型是非常纯正的类型检查器级别的结构体,HHVM几乎完全不知道它的存在注2.事实上,当HHVM运行一段泛型代码的时候,真实的效果就像把所有的类型形参和类型实参都去除.这种行为称为类型消除(type erasure).对于泛型实体定义内的类型形参,这里有"关于你什么能做及什么不能做的"的重要结论.对于类型形参,你唯一能做的一件事是在类型标注中使用它.这里你不能对类型形参做某些其他类型可以的事情.例如:进行实例化,例如new T().把它当作作用域使用,例如T::some

《Hack与HHVM权威指南》——第2章 泛型2.1 入门实例

本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第2章,第2.1节,作者 Owen Yamauchi,更多章节内容可以访问"华章计算机"公众号查看. 第2章 泛型 泛型在Hack的类型系统里面是个非常强大的特性,泛型可以允许你在不知道流程中传入的具体类型的情况下,写出类型安全的代码.一个类或者函数都可以是泛型的,这意味着它可以让调用者来选择传入的参数类型. 泛型结构体最好的例子就是数组和集合类(关于集合类的更多内容请参见第5章).不具备明确指出数组内容具体类型的

《Hack与HHVM权威指南》——1.2.1 自动加载一切

本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1.2.1节,作者 Owen Yamauchi,更多章节内容可以访问"华章计算机"公众号查看. 1.2.1 自动加载一切 类型检查器做出的一个关键假设就是,你的项目经过设置后,代码库中的任何类.函数或者常量都能够在你代码库的其他地方使用.不会尝试去分析任何include或者require语句,确保当前文件在使用时已经加载了其他文件.相反,它认为你已经完成了"自动加载"的相关设置.这就简

《Hack与HHVM权威指南》——1.4.3 调用PHP代码

本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1.4.3节,作者 Owen Yamauchi,更多章节内容可以访问"华章计算机"公众号查看. 1.4.3 调用PHP代码 如果你使用了一个类型检查器无法在任何Hack文件中找到的命名实体,在局部和耦合模式下并不会引发错误(在严格模式下,这将会触发一个"unbound error").这看起来似乎是个很奇怪的宽松的行为,但是真正的目的在于Hack代码从PHP迁移的易用性.这允许Hack

《Hack与HHVM权威指南》——1.3.2 函数的参数

本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1.3.2节,作者 Owen Yamauchi,更多章节内容可以访问"华章计算机"公众号查看. 1.3.2 函数的参数 给函数的参数做类型标注的语法和PHP中使用类型提示参数的语法一致,都是把类型名称放在参数名之前.function f(int $start, string $thing) { // ...}参数的默认值也一如既往地被支持,但前提是默认值要符合类型标注.在PHP中这里对于类型提示参数特别允

《Hack与HHVM权威指南》——1.6.3 推理局限在函数内

本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1.6.3节,作者 Owen Yamauchi,更多章节内容可以访问"华章计算机"公众号查看. 1.6.3 推理局限在函数内 关于Hack的类型推理的一个最基本限制就是:当分析一个函数的时候,它绝对不会看另外一个函数或方法的代码体.举例来说,假设以下是你的全部代码: function f($str) { return 'Here is a string: ' . $str; } function main