У меня два класса: «Пользователь» и «Комната». Класс «Комната» часто использует класс «Пользователь», поэтому, когда я объявляю класс «Комната», я передаю экземпляр класса «Пользователь» в качестве одного из его параметров.
Проблема в том, что свойства / методы класса «Пользователь» защищены, поэтому «Комната» не может использовать внедренный экземпляр «Пользователь».
Затем мне нужно сделать так, чтобы класс «Комната» расширил класс «Пользователь», чтобы у него был доступ к защищенным материалам.
Поскольку «Комната» унаследует все вещи от «Пользователя», которые никогда не будут использоваться, логика говорит, что такая практика неверна? Есть другой способ сделать это?
🤔 А знаете ли вы, что...
С PHP можно создавать кастомные расширения с помощью Си-кода.
Вы действительно не должны заставлять "Комнату" расширять "Пользователь". Хотя это, возможно, сработает, это нарушит третье правило ТВЕРДЫЕ принципы, что в основном означает, что подкласс должен в основном вести себя так же, как родительский класс.
Итак, что вы можете сделать:
Если у вас есть доступ к самому классу (например, он не является частью стороннего кода, такого как библиотека), вы можете просто изменить его, написать геттеры и изменить видимость методов. Это совершенно законно, если это ваш код. Зависимости меняются со временем, поэтому иногда это необходимо.
Расширьте «User» своим собственным классом User и поместите в него геттеры или перезапишите методы. Конечно, в «Комнате» вы должны вместо этого использовать свой новый класс User.
Добавьте общедоступные методы к классу User, который может использоваться классом Room, и создайте интерфейс класса с этими всеми разрешенными общедоступными методами. Общедоступные методы должны вызывать частные методы, а не вызывать частные методы непосредственно из родительского класса.