使 DateTime::createFromFormat() 返回子类而不是父类

2024-06-25

我正在延长DateTime添加一些有用的方法和常量。

使用时new创建一个新对象一切都很好,但是使用静态方法时createFromFormat它总是返回原来的DateTime对象,当然没有任何子方法可用。

我正在使用以下代码来规避此问题。这是最好的方法吗?

namespace NoiseLabs\DateTime;

class DateTime extends \DateTime
{
    static public function createFromFormat($format, $time)
    {
        $ext_dt = new self();

        $ext_dt->setTimestamp(parent::createFromFormat($format, time)->getTimestamp());

        return $ext_dt;
    }
}

这是要走的路。但是,由于您似乎想要做的是使 DateTime 类可扩展,因此我建议您使用static代替self:

namespace NoiseLabs\DateTime;

class DateTime extends \DateTime
{
    static public function createFromFormat($format, $time)
    {
        $ext_dt = new static();
        $parent_dt = parent::createFromFormat($format, $time);

        if (!$parent_dt) {
            return false;
        }

        $ext_dt->setTimestamp($parent_dt->getTimestamp());
        return $ext_dt;
    }
}

如果您不打算扩展课程,则没有必要,但如果有人这样做,这将阻止他再次执行相同的解决方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使 DateTime::createFromFormat() 返回子类而不是父类 的相关文章

随机推荐