Как бы вы реализовали такую архитектуру в рамках PHP?
Для понятности поясню, это касаемо карточной игры.
Есть объект, к которому может быть привязан другой объект, при том связанный объект меняет характеристики и поведение первого объекта. И удаление этого связанного объекта возвращает его к исходному состоянию
Банальный пример: есть карта оружия, к ней можно применить карту усиления, или карту, которая позволяет надевать его в обход игровых правил(переписывает метод $itemCard->canEquip($player)).
Есть идея решения «в лоб», но, надеюсь, знающие люди подскажут более изящное решение.
А как на тему простого EventDispatcher'a / EventListener'a? У нас есть событие GetCardPropeties, которое перезватывает стол или карта и модифицирует флаги события в зависимости от контекста.