2009-09-16 2 views
0

Я использую PHP-классы (ish) Date для календаря/планировщика, который я разрабатываю. Я пытаюсь расширить 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

ответ

1

На самом деле, если вы посмотрите более внимательно, DateInterval действительно НЕ имеет свойства класса с именем «дни». Это «псевдо-свойства», такие как атрибуты на объекте SimpleXML, и попытка расширить эти встроенные классы из кода userland не является прямой, как вы бы хотели. Взгляните на класс Reflection и its friends for help.

+0

Спасибо за указатель. Я пошел и огляделся, но за подписью метода не так много. Знаете ли вы о хорошей ссылке на конкретные (в отличие от теста) примеры использования Reflection (не обязательно должны быть PHP)? В лучшем случае я понимаю, почему и почему Отражения слабее. – dnagirl

Смежные вопросы