在php中转换为超类

在php中转换为超类,php,datetime,Php,Datetime,我正在寻找一种将类强制转换为其父类的方法。情况: 为了减少DateTime对象的杂耍,我扩展了DateTime类,以包含一个_u-toString方法 虽然它工作得很好,但我后来发现它正在破坏DateTime::diff,我假设它正在检查传入对象是否为DateTime 有时候你只需要问问题来回答它 因此,由于我们无法强制转换,我们必须创建一个新对象。我们只需要确保更好地检查继承而不是DateTime对象。如果您正在修复某个问题,请比原始问题更好地修复它。此方法覆盖父方法: 这将检查继承树,查看过

我正在寻找一种将类强制转换为其父类的方法。情况:

为了减少DateTime对象的杂耍,我扩展了DateTime类,以包含一个_u-toString方法

虽然它工作得很好,但我后来发现它正在破坏DateTime::diff,我假设它正在检查传入对象是否为DateTime


有时候你只需要问问题来回答它

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


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

在phpI中强制转换对象是不可能的,后来发现它以什么特殊方式中断了?将带有一个参数的静态diff方法添加到类中,并调用该方法:myDateTime::diff,将类中的数据转换为DateTime对象,并调用DateTime::diff或实现您的代码。@zerkms:edited以给出usage@mkjasinski:对不起,在我提交答案之前,我甚至没有看到您的回复。。。基本上按照你说的做了。如果数组'DateTime',class_parents$object{->instanceof?@zerkms:是的,编辑以反映建议。我甚至寻找了一些可以这样做的东西:你不需要这个函数来工作,只要看看这个演示:在我的Mac机器上不需要,在我的Win机器上需要。很有趣。
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();
}

}
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;
}
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
public function diff($object,$absolute=false){
    if($object instanceof DateTime){
        $object = new DateTime($object);
    }
    return parent::diff($object,$absolute);
}