《Hack与HHVM权威指南》——1.4.2 没有标注的代码

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

1.4.2 没有标注的代码

这里有一种我在早期的列表中没有提及的类型,即没有进行类型标注的类型。举例来说,就像下面函数体内变量$x的类型。
function f($x) {
}
在代码中,你并没有书写任何类型名称在变量$x前面。那么在Hack的体系里面,它指代的类型 为“任何”。
类型检查器会对这种类型进行特殊处理,它永远不会卷入类型错误中,每个在Hack中可以存在的值都会符合这种类型“标注”,所以你可以传递任何值到上例的函数f()中,而不必担心会引发类型错误。换个角度来说,这种类型的值符合每一种可能的类型标注,所以在f()函数内,你可以拿$x做任何事情,而不会引发类型错误。
这听起来和mixed类型很相似,但是这里有个非常重要的不同点。每个可能的值都满足mixed,但是一个mixed类型的值并不满足每个可能的类型标注。举例来说,如果你传递一个mixed类型的值到一个期待int类型的函数中,你必须确保它是个整型(详见1.7.2节的内容),或者强制转化它。
“任何”类型的值在所有Hack模式中都以一样的方式工作。在严格模式下,你不能书写没有标注的代码,但是你可以调用被定义在局部或者耦合模式下没有类型标注的代码。
在“任何可以标注的都必须标注”的严格模式下,严格模式的代码可能使用这种特殊类型的值,但是绝对不允许产生它.

时间: 2024-09-25 16:56:59

《Hack与HHVM权威指南》——1.4.2 没有标注的代码的相关文章

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

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

《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章 类型检查

本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1节,作者 Owen Yamauchi,更多章节内容可以访问"华章计算机"公众号查看. 第1章 类型检查 类型检查器是Hack语言的标志特性,它对Hack程序静态地进行分析(不用运行它们),并且能够检查很多种错误.这就能够在程序开发初期尽量避免bug,并且使程序更容易阅读和理解.为了增强类型检查器的能力,Hack语言允许编程人员显式地在程序体中标注某些变量值的类型,比如函数参数.函数返回值和属性值,类型检

《Hack与HHVM权威指南》——1.7.1 提炼nullable类型到non-nullable类型

本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1节,作者 Owen Yamauchi,更多章节内容可以访问"华章计算机"公众号查看. 1.7.1 提炼nullable类型到non-nullable类型 null检查语句在从空值(nullable)的类型到非空值(non-nullable)类型的转变中经常用到.下面是个通过了类型检查器检查的示例. function takes_string(string $str) { // ... } functio

《Hack与HHVM权威指南》——1.5.1 使用超级全局变量

本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1.5.1节,作者 Owen Yamauchi,更多章节内容可以访问"华章计算机"公众号查看. 1.5.1 使用超级全局变量 超级全局变量是在每个代码范围内都存在的全局变量,不需要使用global语句即可使用.这些在运行环境中特殊存在的变量一共有9个,分别是: $GLOBALS $_SERVER $_GET $_POST $_FILES $_COOKIE $_SESSION $_REQUEST $_ENV

《Hack与HHVM权威指南》——1.5.3 属性值初始化

本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1.5.3节,作者 Owen Yamauchi,更多章节内容可以访问"华章计算机"公众号查看. 1.5.3 属性值初始化 为了维护类型安全,类型标注过的属性在初始化时,无论是严格模式还是局部模式,类型检查器会强加一些规则.首要目标就是确保属性值在没有初始化为正确类型的值之前,不能被读取. 对于静态的属性值,规则非常简单:任何不可为空的(non-nullable)的静态属性值都必须有一个初始化值.没有显式初

《Hack与HHVM权威指南》——1.4 Hack的类型系统

本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1.4节,作者 Owen Yamauchi,更多章节内容可以访问"华章计算机"公众号查看. 1.4 Hack的类型系统 Hack提供了一系列强有力的方法来描述类型,在PHP最基本的布尔型.整型.字符串型.数组等类型系统的基础上,添加了很多新的方式来结合它们,并且使之更富有表现力. 原始类型 这里有和PHP一样的原始类型:bool.int.float.string.array和resource,这些都是合法

《Hack与HHVM权威指南》——第1章 类型检查1.7 类型提炼

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

《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语句,确保当前文件在使用时已经加载了其他文件.相反,它认为你已经完成了"自动加载"的相关设置.这就简