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

1.5.2 覆盖方法的类型

在Hack的代码之间,继承是更加复杂的相互关系中的一种。这复杂性主要来自于当继承关系被创建时,继承和被继承的代码之间的分离现象。举例来说,如果你有个类型标注为SomeClass的对象并可以调用这个对象的某个方法,那么你可以调用继承自SomeClass的任何类的某个方法。这个调用仍然需要是类型安全的,这就意味着覆盖其他方法的时候,方法的类型必须有一定的规则。
在一个覆盖方法中,参数类型必须和被覆盖的方法类型完全一致。这主要是因为继承自PHP的一个行为。在PHP中,任何覆盖自抽象方法或者接口中声明的覆盖方法,都必须精确地匹配被覆盖方法的参数类型。这在未来Hack版本中的声明可能会有所改变,允许改变方法的参数类型将是更通常的做法。
换句话说,当进行方法覆盖时,覆盖方法的返回类型并不一定保持相同,相对于被覆盖的方法而言,覆盖方法可以有一个更加明确的返回类型。例如:

class ParentClass {public function generate(): num {// ...}
}
class ChildClass extends ParentClass {public function generate(): int {  // OK// ...}
}

虽然改变了返回类型,这种多态的调用仍然是类型安全的。
function f(ParentClass $obj) {
$number = $obj->generate();
// 即使$obj是个ChildClass实例,generate()方法自然会返回num类型
// 因为ChildClass::generate() 返回的是int类型,而所有int类型都属于num类型
用更通常的返回类型进行覆盖是非法的。例如,如果ChildClass的generate()方法被声明成返回类型为mixed的话,类型检查器将会报告错误。

《Hack与HHVM权威指南》——1.5.2 覆盖方法的类型相关推荐

  1. 《Hack与HHVM权威指南》——1.1 为什么使用类型检查器

    本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1.1节,作者 Owen Yamauchi,更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...

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

    本节书摘来自华章出版社<Hack与HHVM权威指南>一书中的第1章,第1.5.1节,作者 Owen Yamauchi,更多章节内容可以访问云栖社区"华章计算机"公众号查 ...

  3. 《JS权威指南学习总结--9.5 类和类型》

    内容要点: 介绍了三种用以检测任意对象的类的技术,instanceof运算符.constructor属性,以及构造函数的名字. 但每种技术都不甚完美,本节总结了鸭式辩型,这种编程哲学更加关注对象可以完 ...

  4. 区块链开发指南_区块链开发权威指南

    区块链开发指南 by Haseeb Qureshi 由Haseeb Qureshi 区块链开发权威指南 (The authoritative guide to blockchain developme ...

  5. 《WebAssembly 权威指南》(6)在浏览器中运行遗留代码

    译者注:这篇文章是<WebAssembly 权威指南>一书的第六章,介绍了如何使用 WebAssembly 在浏览器中运行遗留代码,即已经存在的 C/C++ 代码库.文章以一个实际的例子, ...

  6. HTML5与CSS3权威指南之CSS3学习记录

    title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...

  7. Android开发权威指南(第2版)新书发布

    <Android 开发权威指南(第二版)>是畅销书<Android开发权威指南>的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45 章精彩内容供 ...

  8. 《ELK Stack权威指南(第2版)》一3.8 Docker日志

    本节书摘来自华章出版社<ELK Stack权威指南(第2版)>一书中的第3章,第3.8节,作者 饶琛琳  更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.8 ...

  9. 《Ansible权威指南 》一 第一篇 Part 1 基础入门篇

    本节书摘来自华章出版社<Ansible权威指南 >一书中的第1章,第1.1节,李松涛 魏 巍 甘 捷 著更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 ...

最新文章

  1. SAP HU上面的'Obj.to Which HU Belongs'栏位初探
  2. Microsoft.Office.Interop.Excel的用法
  3. OpenCV通过填充修复损坏的图像的实例(附完整代码)
  4. 第 二 十 八 天 :LB 负 载 均 衡 搭 建 之 LVS
  5. Ubuntu系统桌面任务栏和启动器全部消失解决方案
  6. Logstash自定义grok正则匹配规则
  7. mysql把字段拆成两个_MySQL数据库中,将一个字段的值分割成多条数据显示
  8. 鲁棒控制(Ⅰ)—LMI处理方法
  9. 二元函数泰勒公式例题_泰勒公式与函数展开的操作方法
  10. SpringBoot 发送邮件和附件
  11. c语言编程 if怎么用,C语言编程入门——if的用法
  12. python 图片文字提取
  13. http://level3.tasteless.eu/ 获得服务器目录及其内部文件信息
  14. token失效 判断access_微信怎么判断微信accesstoken是否过期
  15. PTA.奇数值结点链表(C语言链表应用)
  16. Python实现数字转人民币(大写汉字)源代码
  17. 【产品开发】北邮国际学院大二下期末复习
  18. 举个栗子!Tableau 技巧(138):学做炫酷的温度计图表
  19. 【论文阅读】【3d目标检测】Behind the Curtain: Learning Occluded Shapes for 3D Object Detection
  20. 泰坦尼克号生存预测python_基于Python sklearn应用逻辑回归对泰坦尼克乘客存活做预测(一)...

热门文章

  1. Linux多线程实践(3) --线程属性
  2. lanmp/lamp/lnmp/lnamp一键安装
  3. Linux Shell脚本入门--wc命令
  4. 【转】VSS的配置和使用
  5. linux手动安装rsync_Linux服务器之间文件如何实现实时同步传输
  6. Nessus更新到8.3.0
  7. Xamarin.Android编译CPU类型选择方式
  8. linux服务器配置php mysql,Linux系统如何安装配置Apache+PHP+MySQL服务器环境
  9. 计算机术语所见即所得,计算机应用基础作业四(16页)-原创力文档
  10. php 输出图片给js,如何在php中利用croppic.js对图片进行剪切并上传