Вопрос №53521 от пользователя Алексей Швецов в уроке «Null Object Pattern», курс «PHP: Полиморфизм»

Алексей Швецов

Здравствуйте.

При решения испытал некий... диссонанс. В моменте, где нужно было дописать конструктор User для создания фейковой подписки. Чисто интуитивно влепил в конструктор FakeSubscription $this, и оно заработало. Решил посмотреть в отладчике, что же там такое получилось, а там:

скриншот

То есть, получается, объекты, бесконечно ссылаются друг на друга? cмайлик. А так можно? Такое часто встречается в реальной разработке? Можно ли было сделать класс по аналогии с тем, что дано в теории? Как-то мозг немножк отказывается воспринимать смайлик.

Спасибо.

2 0

Роман Ашиков

Приветствую, Алексей!

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

Да, такое бывает и это нормальная история.

Чтобы разобраться, почему так получилось, нужно заниматься отладкой. А в целом, интересное наблюдение, вы можете воспользоваться отладочной печатью и посмотреть что происходило при создании объектов. Станет понятно, что привело к такому результату. Можно будет поделиться здесь с другими участниками сообщества своими наблюдениями, думаю всем это будет полезно.

1

Алексей Швецов

Здравствуйте.

В очередной раз, спасибо за ответ!

В целом, и до отладки я подозревал, что будет что-то подобное, ведь мы в конструкторе класса User присваиваем переменной $currentSubscription новый экземпляр FakeSubscription, который ссылается на... этого же пользователя. И получаем, что User ссылается на FakeSubcription, а FakeSubscription ссылается на User. Просто это воспринимается на данном этапе... немного "дико", что ли. И сложно себе представить, в каких ещё ситуациях подобное может понадобиться.

0

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
22 сентября 8 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
22 сентября 8 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
22 сентября 8 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
22 сентября 8 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
22 сентября 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Новый
Создает веб-приложения со скоростью света
22 сентября 5 месяцев

Похожие вопросы

Константин Ситников 22 июля 2021 →

Ревью (https://ru.hexlet.io/code_reviews/426571). Не понимаю что я делаю не так. Получается что у меня что-...

Gleb Varganov 12 ноября 2020 →

Добрый вечер! Хотел узнать Вашего мнения по поводу правильности конструкции в ревью. https://ru.hexlet.io/c...

Станислав Пефтев 26 августа 2020 →

Обратите внимание на проверку существования пользователя. Если её не сделать, то код упадёт с ошибкой, пото...

Вильдан Фазлыев 14 июля 2020 →

Как так получается, что мы создаем объект класса, передавая в него объект, который в данный момент еще не с...

Евгений Вафиев 09 мая 2020 →

Добрый вечер) Хотелось бы уточнить недостатки такой реализации (https://ru.hexlet.io/code_reviews/263055)))...