22
33### Requirements
44
5- PHP >= 8.0.0
5+ PHP >= 8.2
66
77### How to use the library
88
@@ -34,7 +34,7 @@ include 'vendor/autoload.php';
3434``` php
3535use \Micro\Component\DependencyInjection\Container;
3636
37- class Logger {
37+ class Logger implements LoggerInterface {
3838}
3939
4040class Mailer {
@@ -43,10 +43,14 @@ class Mailer {
4343
4444$container = new Container();
4545
46- $container->register(Logger ::class, function(Container $container) {
46+ $container->register(LoggerInterface ::class, function(Container $container) {
4747 return new Logger();
4848});
4949
50+ $container->register('logger.doctrine', function(Container $container) {
51+ return new Logger('doctrine-channel');
52+ });
53+
5054$container->register(Mailer::class, function(Container $container) {
5155 return new Mailer($container->get(Logger::class));
5256});
@@ -70,13 +74,11 @@ class HelloWorldFacade implements HelloWorldFacadeInterface
7074 }
7175}
7276
73-
74- class HelloWorldDecorator implements HelloWorldFacadeInterface
77+ class NiceHelloWorldDecorator implements HelloWorldFacadeInterface
7578{
7679 public function __construct(
77- private readonly HelloWorldFacadeInterface $decoratedService,
78- )
79- {
80+ private readonly HelloWorldFacadeInterface $decoratedService
81+ ) {
8082 }
8183
8284 public function hello(string $name): string
@@ -87,25 +89,51 @@ class HelloWorldDecorator implements HelloWorldFacadeInterface
8789 }
8890}
8991
92+ class HelloWorldLoggerAwareDecorator implements HelloWorldFacadeInterface
93+ {
94+ public function __construct(
95+ private readonly HelloWorldFacadeInterface $decoratedService,
96+ private readonly LoggerInterface $logger
97+ ) {
98+ }
99+
100+ public function hello(string $name): string
101+ {
102+ $result = $this->decoratedService->hello($name);
103+
104+ $this->logger->info->info($result);
105+
106+ return $result;
107+ }
108+ }
109+
90110$container = new Container();
91111
92112$container->register(HelloWorldFacadeInterface::class, function () {
93113 return new HelloWorldFacade();
94114});
95115
116+ $container->register(HelloWorldFacadeInterface::class, function (
117+ HelloWorldFacadeInterface $decorated
118+ ) {
119+ return new NiceHelloWorldDecorator($decorated);
120+ });
121+
96122$container->decorate(HelloWorldFacadeInterface::class, function(
97- HelloWorldFacadeInterface $serviceForDecoration
123+ HelloWorldFacadeInterface $decorated,
124+ Container $container
98125) {
99- return new HelloWorldLoggerAwareDecorator($serviceForDecoration);
126+ return new HelloWorldLoggerAwareDecorator(
127+ $decorated,
128+ $container->get(LoggerInterface::class)
129+ );
100130});
101131
102132echo $container->get(HelloWorldFacadeInterface::class)->hello('Stas');
103133// Output: Hello, Stas. I'm glad to see you
104134
105-
106135```
107136
108-
109137### Sample code for:
110138
111139- [ PSR-11] ( https://www.php-fig.org/psr/psr-11/ )
0 commit comments