PHP 7.4 新功能一览之参数和返回类型改进

PHP 7.4 新功能一览之参数和返回类型改进

Chris Yue No Comment
Posts

在对 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 还是很值得深究的,就因为其反直觉的规则很难让人从心里上适应,导致容易违反其规则(所以才有『正方形不是长方形』,『鸵鸟不是鸟』这种经典总结)。

PHP 7.4 新功能一览之参数和返回类型改进 by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

微信赞赏码

写作累,服务器还越来越贵
求分担,祝愿好人一生平安
天使打赏人

发表评论

− 2 = 5