Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

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

Anna | 31.05.2014 | нет комментариев

Сразу скажу, что опытным программистом откровения не будет, грабли банальные.
Все знают, что в моделях неприемлемо применять суперглобальные массивы $_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)";
}

Не делайте так :)
Во-первых, как протестировать, что покажет запрос через неделю (в действительности логика безусловно труднее, чем в примере)?
Во-вторых, если завтра, потребуется календарь с показом событий за произвольную дату, то придется дублировать код.
Отменнее сразу сделать так:

function findToday()  {
    $this->findByDate( date('Y-m-d') );
}

function findByDate($date)  {
    if ( !preg_match('|^(d{4}-d{2}-d{2})|', $date, $p)  ) {
        throw new Exception('недопустимый формат даты');
    }
    $date = $p[1];

    $sql = "SELECT * FROM event  
           WHERE event_date >= '$date 00:00:00' AND event_date <= '$date 23:59:59' ";
}

Сейчас и протестировать дозволено и вызвать способ для произвольной даты.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB