我正在使用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似乎暗示,'天'应该是有效的。
答案 0 :(得分:1)
实际上,如果你仔细观察,DateInterval实际上没有名为'days'的类属性。这些是“伪属性”,就像SimpleXML对象上的属性一样,并且尝试从userland代码扩展这些内置类并不像你想要的那样直截了当。看一下Reflection类和its friends for help。