Функция даты PHP вызывает проблемы, если входное значение пустое

#php

#php

Вопрос:

Я использую следующий PHP-код, чтобы получить предстоящую дату данного дня. Например, если день указан во «Вторник», он выведет 01-09-2020. Функция предназначена для отображения предстоящих дат продажи смартфонов.

 $saledate = "Tuesday"
date_default_timezone_set('Asia/Kolkata');

function dayDate($day) {
    return new DateTime('next ' . $day);
}
$nextsale = dayDate($saledate);

if(!empty($saledate)) {
    echo "Next Flash Sale on $saledate "; 
    echo $nextsale->format('d-m-Y'); // 01-09-2020
}
  

Проблема в том, что если $saledate пусто, это приводит к тому, что вся веб-страница не загружается. В чем может быть проблема?

Это то, что говорит журнал ошибок

[25-Aug-2020 18:47:15 Asia / Kolkata] Неустранимая ошибка PHP: неперехваченная ошибка: вызов неопределенной функции DayDate() в /home /customer/www/sitename.com/public_html/index.php: 1114 Трассировка стека: #0 {main} введено /home/customer/www/sitename.com/public_html/index.php в строке 1114

Обновление: Исправлено путем добавления $nextsale = dayDate($saledate); внутри блока if.

Комментарии:

1. Какая строка в этом коде является строкой 1114? $nextsale = dayDate($saledate); ? Это внутри класса?

2. Поместите $nextsale = dayDate($saledate); внутрь защищенного блока ( if ).

3. Эта ошибка не соответствует упомянутой вами проблеме, если вы не определяете только, dayDate() если $salesdate не является пустым, но пытаетесь вызвать его независимо. Я вижу, как new DateTime('next ' . $day) происходит сбой и выдает фатальное значение, если $day оно пустое, хотя, поскольку только наличие next недопустимого формата.

4. Возможно, вы захотите использовать IDE / редактор с подсветкой синтаксиса и проверкой ошибок, что может помочь точно определить проблему. Вы пропускаете точку с запятой в первой строке, но, учитывая номер строки в вашем сообщении об ошибке, у меня такое ощущение, что в коде больше, чем здесь, что может быть причиной проблемы.

5. @kerbh0lz строка 1114 — это return new DateTime('next ' . $day); , да, она находится внутри класса. Если вы опубликуете это как ответ, я пометлю это как решение.