Symfony 5 - PHP 7.4 - Должен ли я инициализировать все свои свойства, допускающие значение NULL, равными нулю?

В моем проекте Symfony 5 я нахожусь в процессе перехода с PHP 7.3 на 7.4.

Теперь я могу ввести все свои свойства.

В моих файлах сущностей PhpStorm автоматически набрал для меня все мои свойства, но я очень часто получаю такую ​​​​ошибку:

Типизированное свойство App\Entity\User::$name не должно быть доступно до инициализации

Я просмотрел несколько сайтов, которые говорят об этой проблеме, например:

Почему я вдруг получение свойства Typed не должно быть доступно до ошибки инициализации при введении подсказок типа свойства?

https://github.com/doctrine/orm/issues/7944

Но у меня нет реального ответа на то, что мне действительно нужно делать, некоторые люди, кажется, противоречат друг другу.

Итак, если я правильно понимаю, мне пришлось перейти от:

private ?string $name;

to

private ?string $name = null;

И то же самое для всех свойств $id, я должен поставить:

private ?int $id = null;

Это правильно ?

Теперь, должен ли я воспроизвести эту систему для абсолютно всех моих свойств, которые могут принимать значение NULL?

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

И PhpStorm автоматически вводит эти свойства для меня как обнуляемые. Должен ли я также инициализировать их с нулевым значением?

Для DateTime? Я тоже инициализирую их нулевым значением?

Отношения между сущностями?

И, наконец, коллекции? Раньше я использовал ArrayCollection, а теперь мне нужно вводить их с помощью Collection, например:

private Collection $absences;

Но до этого в конструкторе у меня было так:

public function __construct()
{
   $this->absences = new ArrayCollection();
}

Должен ли я сохранить это?

Большое спасибо за все ваши ответы!


person eronn    schedule 08.04.2021    source источник
comment
Связано.   -  person Jeto    schedule 08.04.2021
comment
Это именно та ссылка, которую я проверял перед публикацией, но не очень понял вывод   -  person eronn    schedule 08.04.2021
comment
Вывод точно такой же, как в связанном дубликате. Если у вас есть типизированные свойства, вы должны убедиться, что значения свойств соответствуют объявленным типам. Либо вы устанавливаете допустимое значение при построении, либо инициализируете свойство с допустимым значением. Если вы оставите его неинициализированным, произойдет сбой, как показывает ошибка.   -  person yivi    schedule 08.04.2021
comment
Я отредактировал свой первый пост более подробно, потому что я не думаю, что это дублирование поста. Я также разместил это сообщение на Reddit, как вы посоветовали мне Cerad   -  person eronn    schedule 08.04.2021
comment
Хорошо, я понимаю немного лучше. Но как насчет коллекций, как я объяснил в своем первом посте (который я редактировал)?   -  person eronn    schedule 08.04.2021
comment
Для коллекций Doctrine вы обычно инициализируете конструктор как new ArrayCollection() . Это все еще дурак. Перед обращением к свойствам необходимо инициализировать их значением правильного типа.   -  person yivi    schedule 08.04.2021
comment
doctrine-project.org/projects/doctrine-orm/en/2.8/reference/   -  person yivi    schedule 08.04.2021