Фатальная ошибка: Неперехваченная ошибка: Вызов функции-члена format() при нуле

#php #laravel

Вопрос:

Привет, я сталкиваюсь с фатальной ошибкой в этом, и я не могу найти здесь никаких решений,

это ошибка, которую он возвращает при вызове этой функции.

 Fatal error: Uncaught Error: Call to a member function format() on null

$startDate = $data->started_at ? DateTime::createFromFormat('Y-m-d H:i:s', $data->started_at) : null;

    return $data ? (object) [
        'planId' => $data->plan_id ?? '',
        'comment' => $data->comment ?? '',
        'facilitator' => $data->facilitator ?? '',
        'date' => $startDate->format('d/m/Y') ?? '',
        'time' => $startDate->format('H:i:s') ?? '',

    ] : (object) [];
}
 

дополнительная информация,

Я пытаюсь получить данные об этом, однако в данном случае у меня нет начальной даты, и я все равно хотел бы вернуть сохраненные данные. Я не уверен, что мой синтаксис правильный.

Спасибо, Ребята

Ответ №1:

Поскольку $startDate иногда может быть значение null, вам нужно проверить, является ли оно нулевым, прежде чем вызывать format() его, так как вы не можете вызвать метод с нулевым значением.

Если вы используете PHP 8.0, вы можете объединить безопасные для нуля операторы ( ?-> ) с существующими операторами объединения нулей ( ?? ):

 'date' => $startDate?->format('d/m/Y') ?? '',
'time' => $startDate?->format('H:i:s') ?? ''
 

В противном случае вы можете использовать тернарные операторы ( ? : ):

 'date' => $startDate === null ? '' : $startDate->format('d/m/Y'),
'time' => $startDate === null ? '' : $startDate->format('H:i:s')
 

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

1. или вызовите вспомогательную функцию laravel optional . как в optional($startDate)->format('d/m/Y')