扩展DateInterval,未知属性错误

时间:2009-09-16 20:31:05

标签: php date

我正在使用PHP的新(ish)Date类来处理我正在开发的日历/调度程序。我正在尝试扩展DateInterval,以便将间隔限制为特定大小,如1年,1个月,1周或1天。扩展类将用于帮助生成日历视图。

当我运行以下方法时,我收到PHP错误:未知属性(天)。

private function adjust(){

     //to zero all the DateInterval properties except the one I want
    $adjustments = array ('y'=>0, 'm'=>0, 'd'=>0, 
                           'h'=>0, 'i'=>0, 's'=>0, 
                           'invert'=>0, 'days'=>0); 


    if($this->y>=1 || $this->days>180){
        $adjustments['y']=1; //1 year
    } else if ($this->m>6){
        $adjustments['y']=1; //1 year
    } else if ($this->m>=1){
        $adjustments['m']=$this->m; //multiple months less than 6
    } else if ($this->d>7){
        $adjustments['m']=1; //1 month
    } else if ($this->d>1){
        $adjustments['d']=7; //1 week
    } else {
        $adjustments['d']=1; //1 day
    }

    foreach($adjustments as $k=>$v){
        $this->$k=$v; //reset all the class properties
    }       
}

知道为什么吗?就documentation似乎暗示,'天'应该是有效的。

1 个答案:

答案 0 :(得分:1)

实际上,如果你仔细观察,DateInterval实际上没有名为'days'的类属性。这些是“伪属性”,就像SimpleXML对象上的属性一样,并且尝试从userland代码扩展这些内置类并不像你想要的那样直截了当。看一下Reflection类和its friends for help