1

我正在寻找一种将类投射到其父级的方法。情况:

为了减少与 DateTime 对象的混淆,我扩展了 DateTime 类以包含一个__toString方法。

class myDateTime extends DateTime{
public $formatstring = null;

public function format($format = null) {
    if(null === $format){
        $format = $this->formatstring;
    }
    if(null === $format){
        $format = 'Y-m-d H:i:s';
    }

    return parent::format($format);
}

public function __toString(){
    return $this->format();
}

}

虽然这很好用,但我后来发现它正在中断DateTime::diff,我假设正在检查传入object的是DateTime.

public function TotalTime(){
    $start = $this->getStart();
    $end   = $this->getEnd();
    $diff  = $end->diff($start);

    $minutes = 
        ($diff->days*1440) +
        ($diff->h * 60) +
        ($diff->i *  1) +
        ($diff->s / 60);

    echo("<pre>Start:$start\nEnd:$end\nMin:$minutes\n</pre>");
    var_dump($diff);

    return $minutes;
}

生成的 DateInterval 始终将每个值都归零。

关于对继承类进行类型转换的最有效方法有什么建议吗?PHP 5.4

编辑: 这似乎取决于环境。目前,这似乎只发生在 Windows/PHP 上。

PHP 5.4.10 (cli) (built: Dec 19 2012 20:33:35)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
4

1 回答 1

0

有时您只需要提出问题即可回答。

因此,由于我们无法强制转换,我们将不得不创建一个新对象。我们只需要确保比DateTime对象更好地检查继承(如果您正在修复某些东西,请比原始问题更好地修复它)。此方法覆盖父方法:

public function diff($object,$absolute=false){
    if($object instanceof DateTime){
        $object = new DateTime($object);
    }
    return parent::diff($object,$absolute);
}

这将检查继承树以查看过去是否有任何东西从 DateTime 继承,这将允许它在其他人继承时继续工作myDateTime

于 2013-04-10T00:49:00.513 回答