Как стать автором
Обновить

time() или now() как зависимость от глобального окружения

Время на прочтение2 мин
Количество просмотров7.5K
Сразу скажу, что опытным программистом откровения не будет, грабли тривиальные.
Все знают, что в моделях недопустимо использовать суперглобальные массивы $_POST, $_SESSION, $_SERVER и т.д., поскольку это делает невозможным усложняет тестирование кода и его повторное использование. Но если суперглобальные массивы, всё-таки, при желании можно «хакнуть» (разумеется это уже за гранью добра и зла), то другую менее очевидную зависимость от глобального окружения — уже никак.
Я говорю о времени — такую зависимость вы добавляете в свой код, когда используете в php-модели time() ( date() без аргумента timestamp) или в MySql-запросе now() (sysdate в Oracle). «Хакнуть» время сервера, чтобы узнать как поведет себя ваш запрос завтра или вчера — задача нетривиальная.
Как это происходит.

У вас есть таблица с афишей Event и задача — вывести сегодняшние события, ручки сразу тянуться написать now():
function findToday()  {
    $sql = "SELECT * FROM event  
           WHERE event_date >= date( now() ) AND event_date < date( now() + interval 1 day)";
}

Не делайте так :)
Во-первых, как протестировать, что покажет запрос через неделю (в реальности логика конечно сложнее, чем в примере)?
Во-вторых, если завтра, понадобится календарь с показом событий за произвольную дату, то придется дублировать код.
Лучше сразу сделать так:
UPDATE:
function findToday()  {
    $this->findByDate( new DateTime() );
}

 function findByDate( DateTime $dateTime )  {
        $dateStart = $dateTime->format('Y-m-d H:00:00');
        $dateEnd   = $dateTime->format('Y-m-d 23:59:59');
        
        $sql = "SELECT * FROM event  
               WHERE event_date >= '$dateStart' AND event_date <= '$dateEnd' ";
 }

Теперь и протестировать можно и вызвать метод для произвольной даты.

UPD. 15 анонимных минусов, люди! 14 человек добавили статью в избранное, объясните всем что ни так в статье? Или поставить минус — это вроде секса?
Теги:
Хабы:
Всего голосов 28: ↑11 и ↓17-6
Комментарии14

Публикации

Работа

PHP программист
70 вакансий

Ближайшие события