Паттерн Стратегия
Делаем общий для объектов Event интерфейс (с головы придумал метод begin() ):
interface EventInterface
{
public function begin();
}
и создаем разные events:
class ConcreteEvent implements EventInterface
{
public function begin()
{
// ..
}
}
class OtherEvent implements EventInterface
{
public function begin()
{
// ..
}
}
В нашем MyClass создаем свойство $event и для него сеттер и используем его:
Class MyClass
{
private $event;
public function __construct(SomeClass $obj, AnotherClass $obj2)
{
// инициализация с переданными параметрами
}
public function setEvent(EventInterface $event)
{
$this->event = $event;
}
private function doSomething()
{
// Работаем с нашим event
$someDoing = $this->event->begin();
}
}
Тогда уже в конечном коде нам нужно будет работать так примерно:
$myObj = new MyClass(SomeClass $obj, AnotherClass $obj2);
// Set Event
$myObj->setEvent(new OtherEvent);
// Далее работаем с наши готовым объектом, у которого уже есть нужны Event
ЗАРАНЕЕ ПРИНОШУ ПРОЩЕНИЯ, ЕСЛИ ОШИБСЯ — сам как 3 дня изучаю паттерны
Возможно вам не подойдет применение далее по реализации — нужно смотреть что и как
Почему-то думал, что такой вопрос возымеет популярность