2009-09-16 70 views
0

我正在使用PHP的新(ish)日期類爲我正在開發的日曆/調度程序。我試圖延長DateInterval,以便將間隔限制爲特定的大小,如1年,1個月,1周或1天。擴展類將用於幫助生成日曆視圖。延長DateInterval,未知屬性錯誤

我收到了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

對不起,沒有幫助,沒有安裝PHP5.3進行測試。但是'print_r()'值很可能是即時生成的「只讀」值。 – soulmerge 2009-09-16 21:03:19

回答

1

實際上,如果仔細觀察,DateInterval確實沒有名爲'days'的類屬性。這些是「僞屬性」,就像SimpleXML對象上的屬性一樣,試圖從userland代碼擴展這些內置的類並不是一個簡單的過程,因爲你希望它是。看看Reflection類和its friends for help

+0

感謝您的指針。我去環顧四周,但除了方法簽名外沒有太多東西。你知道一個很好的參考具體(而不是測試)使用反射(不一定是PHP)的例子嗎?我對反思的原因和理由的掌握最多也很弱。 – dnagirl 2009-09-16 22:45:16