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

noi*_*eed 11 php inheritance datetime extend php-5.3

我正在扩展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;
    }
}
Run Code Online (Sandbox Code Playgroud)

net*_*der 13

这是要走的路.但是,由于你想要做的是渲染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;
    }
}
Run Code Online (Sandbox Code Playgroud)

没有必要,如果你不打算扩展课程,但如果有人这样做,它将阻止他再次做同样的解决方法.