Advertisement
Guest User

DIY Dependency Injection

a guest
Oct 10th, 2017
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.74 KB | None | 0 0
  1. <?php
  2. class Container
  3. {
  4.     public function createController($controller)
  5.     {
  6.         return new $controller(
  7.             $this->createLogger($controller),
  8.             $this->createView('template')
  9.         );
  10.     }
  11.  
  12.     public function createLogger($name)
  13.     {
  14.         return new Logger(
  15.             $this->createStream('stdout'),
  16.             $name
  17.         );
  18.     }
  19.  
  20.     public function createView($template)
  21.     {
  22.         return new View($template);
  23.     }
  24.  
  25.     public function createStream($stream)
  26.     {
  27.         return new Stream($stream);
  28.     }
  29. }
  30.  
  31. abstract class BaseController
  32. {
  33.     public function __construct(Logger $logger, View $view)
  34.     {
  35.         $this->logger = $logger;
  36.         $this->view = $view;
  37.     }
  38.  
  39.     public function doSomething()
  40.     {
  41.         var_dump($this);
  42.     }
  43. }
  44.  
  45. class Controller1 extends BaseController {}
  46. class Controller2 extends BaseController {}
  47. class Controller3 extends BaseController {}
  48.  
  49. class Logger
  50. {
  51.     public function __construct(Stream $stream, $name)
  52.     {
  53.         $this->stream = $stream;
  54.         $this->name = $name;
  55.     }
  56. }
  57.  
  58. class View
  59. {
  60.     public function __construct($template)
  61.     {
  62.         $this->template = $template;
  63.     }
  64. }
  65.  
  66. class Stream
  67. {
  68.     public function __construct($stream)
  69.     {
  70.         $this->stream = $stream;
  71.     }
  72. }
  73.  
  74. $c = new Container();
  75. $app = $c->createController('Controller2');
  76. $app->doSomething();
  77.  
  78. /* Outputs :
  79.  
  80. object(Controller2)#2 (2) {
  81.   ["logger"]=>
  82.   object(Logger)#3 (2) {
  83.     ["stream"]=>
  84.     object(Stream)#4 (1) {
  85.       ["stream"]=>
  86.       string(6) "stdout"
  87.     }
  88.     ["name"]=>
  89.     string(11) "Controller2"
  90.   }
  91.   ["view"]=>
  92.   object(View)#5 (1) {
  93.     ["template"]=>
  94.     string(8) "template"
  95.   }
  96. }
  97. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement