在对 PHP 7.2 的新功能介绍的一篇文章中,提到了当时 7.2 版本对参数和返回类型的改进,并且还引出了 LSP,即 Liskov 替换原则的话题(没看过的小伙伴建议先看看那篇)。不过当时的改进依然有一个小遗憾,即某个方法的参数(或返回)类型在子类复写时,只能将参数设置为可为 null(或限制返回不可为 null),无法做其他的类型覆盖。到了 7.4 版本,当时的小遗憾终于得到解决了

class Foo

{

}

class FooFoo extends Foo

{

}

class Bar

{

public function handle(FooFoo $foo)

{

}

}

class BarBar

{

public function handle(Foo $foo) // 在 PHP 7.4 之前是会报错的

{

}

}

class Baz

{

public function getFoo(): Foo

{

}

}

class BazBaz

{

public function getFoo(): FooFoo // 在 PHP 7.4 之前是会报错的

{

}

}

关于此改进,以及 LSP,其实也有很多可以聊的点,但在介绍 PHP7.2 那篇文章里,以及后来为 LSP 单独写的一篇文章里,其实概念的东西也还说的很清楚,这里就不用再重复了。总之 LSP 还是很值得深究的,就因为其反直觉的规则很难让人从心里上适应,导致容易违反其规则(所以才有『正方形不是长方形』,『鸵鸟不是鸟』这种经典总结)。

写作累,服务器还越来越贵

求分担,祝愿好人一生平安

天使打赏人

php7 参数类型限定,PHP 7.4 新功能一览之参数和返回类型改进相关推荐

  1. Junit5新功能一览

    转载自 Junit5新功能一览 Java的JUnit测试框架已经来到了5这个版本,与以前的版本不同的是JUnit5具有来自多个子项目的模块,其中包括: 1.Platform,用于在JVM上启动测试框架 ...

  2. 定义一个学生类。 有下面的类属性:①姓名②年龄③成绩(语文,数学,英语)[每课成绩的类型为整数] 类方法: ①获取学生的姓名:get_name() 返回类型:str ②获取学生的年龄:ge

    python实现:定义一个学生类. 有下面的类属性:①姓名②年龄③成绩(语文,数学,英语)[每课成绩的类型为整数] 类方法: ①获取学生的姓名:get_name() 返回类型:str ②获取学生的年龄 ...

  3. php7 参数类型限定,PHP 7.2新特性:参数类型声明(附代码)

    php7.2版本具有新特性,功能和改进,可以让我们编写更好的代码,下面的文章中我将介绍php7.2中的一个新的功能:参数类型声明,话不多说,让我们来具体看看正文内容. 参数类型声明 从PHP 5开始, ...

  4. mysql 5.6参数_初识 MySQL 5.6 新功能、参数

    摘要: MySQL5.6 针对 MySQL5.5 各个方面又提升了很多,特别在性能和一些新参数上面,现在看看大致提升了哪些方面(后续不定时更新). 一:性能.功能上的提升. ① 在线DDL即 onli ...

  5. python3重写new方法_Python 3.8 新功能一览

    Python 3.8是Python语言的最新版本,它适合用于编写脚本.自动化以及机器学习和Web开发等各种任务.现在Python 3.8已经进入官方的beta阶段,这个版本带来了许多语法改变.内存共享 ...

  6. .NET 6 预览版 7:新功能已完成 ,将专注于改进

    .NET 团队的项目经理 Richard Lander在宣布 .NET 6 Preview 7 时说:"这是 .NET 预览的又一季的结束.", 中文翻译:.NET 6 预览版 7 ...

  7. C# 9.0 新功能一览

    微软正在推进C# 9.0的开发,C# 9.0 将成为.NET 5 开发平台的一部分,预计于 11 月发布.微软.NET团队C#首席设计师Mads Torgersen表示,C# 9.0已初具规模,本文就 ...

  8. C# 9.0 新功能一览!

    整理 | 弯月 责编 | 郭芮 微软正在推进C# 9.0的开发,C# 9.0 将成为.NET 5 开发平台的一部分,预计于 11 月发布.微软.NET团队C#首席设计师Mads Torgersen表示 ...

  9. 【更新发布】TensorFlow 2.4 新功能一览!

    TensorFlow 2.4 正式发布!随着对分布式训练和混合精度提供更多支持,加入新的 Numpy 前端及用于监控和诊断性能瓶颈的工具,这个版本的亮点在于推出新功能,以及对性能和扩展方面的增强. t ...

最新文章

  1. 小型可编程电源:WUZHI WZ5005
  2. 开启Sharepoint 2013站点邮箱
  3. dos命令关闭所有dos窗口
  4. SWIFT问题很大,第4家受害银行浮出水面
  5. python圆的半径计算圆的周长列表_python计算圆周长、面积、球体体积并画出圆
  6. 模型参数优化(三):模拟退火
  7. sqlserver中时间格式的字符串传递时的注意事项
  8. 如何进行产品战略规划
  9. 机器学习降维算法四:Laplacian Eigenmaps 拉普拉斯特征映射
  10. 安装php服务器,安装php服务器环境的方法
  11. 输出四位完全平方数_leetcode279_go_完全平方数
  12. 01.学习笔记-linux操作系统常用命令
  13. Oracle SQL 精妙SQL语句讲解
  14. 华为网络技术大赛2017 考后感
  15. HP 暗影精灵4 黑苹果 完美_HP_omen_15dc_hackintash
  16. Pr 入门教程:如何向影片中的剪辑添加过渡效果?
  17. 小游戏 版本提交审核, 资质提交审核指引
  18. qt中采用G.729A进行网络语音通话实验程序
  19. 阿兹卡班(azikaban)报错:syntax error:unexpected end of file
  20. openresty实现隧道代理

热门文章

  1. 谷歌浏览器安装过程 0911
  2. 爬虫-发起post请求-稿件
  3. python-模块的嵌套调用-随堂草稿件
  4. 软链接与硬链接的区别;描述通配符与正则表达式的区别
  5. CF666B. World Tour
  6. passive 的事件监听器
  7. JAVA菜鸟入门HelloWorld
  8. 我的第一个项目----Java图书管理系统
  9. codeforces679C Bear and Square Grid(dfs优化)
  10. mongodb 总结