Php возвращать ли Null вместо DateTime?

120
24 октября 2019, 13:00

Есть некий класс "Task" который заполняется данными В метод setDate передается либо null либо временная строка, строка преобразуется в объект типа \DateTime()

Как сделать так что бы при получении даты через метод getDate() система не ломалась если свойство date содержит Null

Цель: сократить кол-во условий

Как решить проблему?

  1. Заливать фейковую дату 0000-00-00 - но в php это как то странно работает проставляется месяц ноябрь по умолчанию
  2. Перегрузить класс DateTime в DateTimeNull и возвращать null в метода - но это решение нарушает LSP и скорее всего в будущем вызовет массу проблем
  3. Сделать адаптер над DateTime и возвращать 0000-00-00 дату, или null или еще что то еще что то на свое усмотрение
  4. Не надо ничего делать, всегда проверять что метод getDate() содержит
  5. Ваш вариант
class Task
{
    private $date;
    /**
     *
     * @param $dateTime null | \DateTime
     */
    function setDate($dateTime)
    {
        $this->date = \DateTime::createFromFormat('D d M Y H:i:s +T', $dateTime);
    }
    /**
     * @param $dateTime
     * @return null|DateTime
     */
    function getDate($dateTime)
    {
        return $this->date;
    }

}
/* -------как сейчас ------- */
$tasks = new Tasks();
foreach ($tasks as $task) {
    if (!$task->getDate()) {
        continue;
    }
    $task->getDate()->format('D');
}
/*  ------как надо-------- */
$tasks = new Tasks();
foreach ($tasks as $task) {
    $task->getDate()->format('D');
}
READ ALSO
Ноль в конце данных ajax запроса?

Ноль в конце данных ajax запроса?

echo добавляет в конце 0, при ошибке и при правильной работеКак его убрать? Вот код

109
Подключеный php файл не видит $_POST и $_SESSION

Подключеный php файл не видит $_POST и $_SESSION

Нужно было сделать загрузку нескольких изображений на сервер, все сделал, но была проблема: пока файлы отправлялись и редактировались, не подгружался...

143
Объединить запросы из цикла в главный

Объединить запросы из цикла в главный

Задача оптимизировать работу с планировщиком задач в CRMВынести все запросы из цикла (их там до 15шт - а это пипец) в один главный и уже с результатом...

141
C++ clr заполнить Dictionary в нативной части кода

C++ clr заполнить Dictionary в нативной части кода

Есть желание заполнять Dictionary вида Dictionary<Enum,Struct> в нативной части кода, используя возможности трансляции через vcclrh

130