Оглавление

Установка базовых свойств

Создав необходимую инфраструктуру в целом, можно вернуться к конструктору класса Calendar и заняться его окончательной доработкой.

 
Проверив наличие объекта базы данных, конструктор должен сохранить определенную информацию о месяце, который будет использоваться при построении календаря.

 
Прежде всего конструктор проверяет, передана ли ему дата; если это так, то он сохраняет ее в свойстве $_useDate, в противном случае использует текущую дату.

 

После этого дата преобразуется в отметки времени UNIX (исчисляются в секундах от начала "эры UNIX"(1); более подробно об этом можно прочитать в статье Википедии по адресу UNIX-время), на основании которых рассчитываются значения года и месяца, которые сохраняются соответственно в переменных $_m и $_y.


Наконец, значения, сохраненные в переменных $_m и $_y, используются для того, чтобы определить, сколько дней содержит используемый месяц и с какого дня недели он начинается.

 
Соответствующую функциональность в конструкторе обеспечивает фрагмент кода, выделенный ниже желтым фоном:

 <?php 
 
class Calendar extends DB_Connect 
{ 
 
 
    private $_useDate; 
 
    private $_m; 
 
    private $_y; 
 
    private $_daysInMonth; 
  private $_startDay; 
  public function __construct($dbo=NULL, $useDate=NULL) 
  { 
      /* 
       * Вызвать конструктор родительского класса для проверки 
       * существования объекта базы данных г
       */ 
      parent::__construct($dbo); 
      /*                                                      
       * Собрать и сохранить информацию, относящуюся к месяцу 
       */                                                     
      if ( isset($useDate) )                                  
      {                                                       
           $this->_useDate = $useDate;                        
      }                                                       
      else                                                    
      {                                                       
           $this->_useDate = date('Y-m-d H:i:s');             
      }                                                       
      /*                                                      
       * Преобразовать во временную метку UNIX, а затем       
       * определить месяц и год, которые следует использовать 
	   * при построении календаря                         
       */                                                     
      $ts = strtotime($this->_useDate);                       
      $this->_m = date('m', $ts);                             
      $this->_y = date('Y', $ts);                             
      /*                                                      
       * Определить количество дней, содержащихся в месяце    
       */                                                     
      $this->_daysInMonth = cal_days_in_month(                
              CAL_GREGORIAN,                                  
              $this->_m,                                      
              $this->_y                                       
          );                                                  
                                                              
        /*                                                    
         * Определить, с какого дня недели начинается месяц   
         */                                                   
        $ts = mktime(0, 0, 0, $this->_m, 1, $this->_y);       
        $this->_startDay = date('w', $ts);                    
    } 
} 
 
?> 

 

При перезагрузке страницы http://localhost/ все свойства, значения которых ранее были равны NULL, получат нужные значения.

object(Calendar)#2 (6) {
  ["_useDate:private"]=>
  string(19) "2010-01-01 12:00:00"
  ["_m:private"]=>
  string(2) "01"
  ["_y:private"]=>
  string(4) "2010"
  ["_daysInMonth:private"]=>
  int(31)
  ["_startDay:private"]=>
  string(1) "5"
  ["db:protected"]=>
  object(PDO)#3 (0) {
  }
}
Примечания:
  • Моментом начала "эры UNIX" считается полночь (по UTC) с 31 декабря 1969 года на 1 января 1970 года.
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити