Конструктор используется для инициализации объекта. Ожидается, что в объектно-ориентированном программировании объект не должен существовать, если он не находится в допустимом состоянии. Например, Person без имени и фамилии может не считаться допустимым объектом, поэтому при первом создании объекта его следует инициализировать с помощью имени и фамилии в конструкторе.
Причина, по которой вы получили ошибку, заключается в том, что в конструкторе есть обязательный параметр, поэтому вы должны передать ему аргумент.
P.S. Я действительно ненавижу объяснения объектно-ориентированного программирования, которые пытаются использовать аналогии, такие как "Dog is-a Mammal". Вы, вероятно, должны держаться подальше от этих примеров. Они действительно не дают полезной информации в программировании в реальном мире, а иногда даже дают учащимся иллюзию, что они понимают, как использовать то, чему их учат.
Если вы ищете практическое применение использования конструктора для создания объекта в допустимом состоянии, представьте сообщение в блоге, в котором для сохранения используется база данных.
Например, не было бы смысла писать длинный пост и затем вызывать $BlogPost->save();
, если блог не был инициализирован сначала со ссылкой на базу данных. Применение конструктора в этом случае, возможно, будет
$BlogPost = new BlogPost($Database);
Нет смысла писать:
$BlogPost->setDatabase($Database);
каждый раз, когда ты хотел что-то с этим сделать. Возможно, вы забудете написать это один раз, и вам будет интересно, куда исчезла запись, на которую вы потратили 30 минут. Это пример недопустимого состояния.
Идея состоит в том, что вы включаете все, от чего зависит класс, когда он впервые инициализируется, вместо того, чтобы рисковать возможностью того, что объект находится в недопустимом состоянии.
Редактировать: исправлены два параметра к одному.