【问题标题】:PHP: Good ways to Refactor an overwriting method with different return typePHP:重构具有不同返回类型的覆盖方法的好方法
【发布时间】:2019-06-08 21:25:50
【问题描述】:

基类中方法的返回类型已更改。重构子方法以保持其当前返回类型的好方法是什么?

在下面的示例中,有一个 Database 类,它现在返回一个 date 作为一个简单的 string。另一方面,继承类覆盖 getDate 并且仍应返回 DateTime

注意:基类中的实现不能更改。

想法: 重命名 DoStuff 类中的 getDate 方法。

class Database
{
    public function getDate(): string
    {
        return '01-01-0001';
    }
}

class DoStuff extends Database
{
    public function getDate(): DateTime
    {
        return DateTime::createFromFormat('d-m-Y', parent::getDate());
    }
}

是否有解决此类问题的最佳实践?非常感谢您的帮助。

【问题讨论】:

  • 调用basemethod并转换值。但是您必须更改名称,因为它不再是覆盖。
  • 你不妨考虑hiding。但是我不确定这个概念是否存在于 PHP 中。因此是 c# 链接。
  • 非常感谢您的回复!不幸的是,隐藏的概念似乎不是 php 中的一个选项。

标签: php return refactoring overriding


【解决方案1】:

在这种情况下,我看到的简单方法是创建一个进行转换的函数,该函数将返回 DateTime,并且您不需要覆盖 getDate:

class DoStuff extends Database
{
    public function pickDate(): DateTime
    {
        return DateTime::createFromFormat('d-m-Y', $this->getTime());
    }
}

希望对你有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多