public function provide(Container $container) { return $container->make($this->class); }
public function provide(Container $container) { return $container->call($this->callback); }
public function provide(Container $container) { return $container->call(array($container->make($this->class), $this->method)); }
} public function foo() { return "Decorated({$this->id}) " . $this->foo->foo(); } } class FooBarDecorator implements Decorator { private $id; private $count = 0; public function __construct($id) { $this->id = $id; } public function decorate(Container $container, $provided) { echo __METHOD__ . "({$this->id})\n"; return new FooBarDecoration($provided, $this->id . '-' . ++$this->count); } } $container = new Container(); $container->bind(__NAMESPACE__ . '\\Foo', __NAMESPACE__ . '\\FooBar')->decorator(new FooBarDecorator(1))->decorator(new FooBarDecorator(2))->resolver(new CachedResolver())->decorator(new FooBarDecorator(3)); echo "----------------------------------------------------\n"; echo $container->provide(__NAMESPACE__ . '\\Foo')->foo() . "\n"; echo "----------------------------------------------------\n"; echo $container->provide(__NAMESPACE__ . '\\Foo')->foo() . "\n"; echo "----------------------------------------------------\n"; echo $container->provide(__NAMESPACE__ . '\\Foo')->foo() . "\n"; echo "----------------------------------------------------\n"; echo $container->provide(__NAMESPACE__ . '\\Foo')->foo() . "\n"; echo "----------------------------------------------------\n";