Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Container
- {
- public function createController($controller)
- {
- return new $controller(
- $this->createLogger($controller),
- $this->createView('template')
- );
- }
- public function createLogger($name)
- {
- return new Logger(
- $this->createStream('stdout'),
- $name
- );
- }
- public function createView($template)
- {
- return new View($template);
- }
- public function createStream($stream)
- {
- return new Stream($stream);
- }
- }
- abstract class BaseController
- {
- public function __construct(Logger $logger, View $view)
- {
- $this->logger = $logger;
- $this->view = $view;
- }
- public function doSomething()
- {
- var_dump($this);
- }
- }
- class Controller1 extends BaseController {}
- class Controller2 extends BaseController {}
- class Controller3 extends BaseController {}
- class Logger
- {
- public function __construct(Stream $stream, $name)
- {
- $this->stream = $stream;
- $this->name = $name;
- }
- }
- class View
- {
- public function __construct($template)
- {
- $this->template = $template;
- }
- }
- class Stream
- {
- public function __construct($stream)
- {
- $this->stream = $stream;
- }
- }
- $c = new Container();
- $app = $c->createController('Controller2');
- $app->doSomething();
- /* Outputs :
- object(Controller2)#2 (2) {
- ["logger"]=>
- object(Logger)#3 (2) {
- ["stream"]=>
- object(Stream)#4 (1) {
- ["stream"]=>
- string(6) "stdout"
- }
- ["name"]=>
- string(11) "Controller2"
- }
- ["view"]=>
- object(View)#5 (1) {
- ["template"]=>
- string(8) "template"
- }
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement