summoner2015
@summoner2015
Backend всему голова

Как реализовать такой механизм работы контейнера сервисов?

Всем доброго дня.
Ситуация такая:
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 не отличал передали ему экземпляр, либо ссылку на элемент контейнера.
  • Вопрос задан
  • 274 просмотра
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Передавайте имя класса в виде строки.
https://stackoverflow.com/questions/4578335/creati...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы