Всем доброго дня.
Ситуация такая:
1. Есть некий контейнер сервисов.
$conatiner;
2. Мы помещаем в него некий класс, например phpMailer
$conatiner->set('mailer',function(){
return new phpMailer();
})
3. Логика работы контейнера простая, он помогает отложить создание объекта, до момента его первого вызова. Т.е. когда нам нужно отправить письмо, мы делаем как-то так:
$mailer = $conatiner->get('mailer');
// тут задаём необходимые параметры класса phpMailer
$mailer->send();
4. При повторной отправке, код тот же, но контейнер не создаёт новый экземпляр класса, а отдаёт тот который был создан при самом первом обращении к этому элементу контейнера.
Так же есть класс, который тоже работает с отправкой почты. В его конструктор необходимо передать экземпляр класса phpMailer, т.к. он использует его для отправки писем.
$someMailer = new MyMailerClass(new phpMailer());
Вот теперь вопрос. Как можно реализовать работу контейнера таким образом, что бы вместо экземпляра phpMailer можно было передать ссылку, или какой-либо указатель на элемент контейнера, но при этом не вызвать конструктор этого класса. Т.е. отложить создание экземпляра класса phpMailer в контейнере до момента первого обращения к нему из класса MyMailerClass()??
Очень желательно, что бы класс MyMailerClass не отличал передали ему экземпляр, либо ссылку на элемент контейнера.