From 93506afbce096039caeaa581628a876410dfdac2 Mon Sep 17 00:00:00 2001 From: Gunnar Wrobel Date: Fri, 2 Oct 2009 15:40:33 +0200 Subject: [PATCH] Some example of how to use Horde_Injector. --- .../Injector/examples/Horde/Injector/binder.php | 56 ++++++++++++++++++++++ .../Injector/examples/Horde/Injector/factory.php | 40 ++++++++++++++++ .../examples/Horde/Injector/implementation.php | 50 +++++++++++++++++++ .../Injector/examples/Horde/Injector/setget.php | 18 +++++++ 4 files changed, 164 insertions(+) create mode 100644 framework/Injector/examples/Horde/Injector/binder.php create mode 100644 framework/Injector/examples/Horde/Injector/factory.php create mode 100644 framework/Injector/examples/Horde/Injector/implementation.php create mode 100644 framework/Injector/examples/Horde/Injector/setget.php diff --git a/framework/Injector/examples/Horde/Injector/binder.php b/framework/Injector/examples/Horde/Injector/binder.php new file mode 100644 index 000000000..5058aaf83 --- /dev/null +++ b/framework/Injector/examples/Horde/Injector/binder.php @@ -0,0 +1,56 @@ + + * @license http://opensource.org/licenses/bsd-license.php BSD + * @link http://pear.horde.org/index.php?package=Injector + */ + +require_once 'Horde/Autoloader.php'; + +/** + * A dummy binder. + * + * @category Horde + * @package Injector + * @author Gunnar Wrobel + * @license http://opensource.org/licenses/bsd-license.php BSD + * @link http://pear.horde.org/index.php?package=Injector + */ +class Binder implements Horde_Injector_Binder +{ + /** + * Create an instance. + * + * @param Horde_Injector $injector The injector should provide all required + * dependencies for creating the instance. + * + * @return mixed The concrete instance. + */ + public function create(Horde_Injector $injector) + { + return 'constructed'; + } + + /** + * Determine if one binder equals another binder + * + * @param Horde_Injector_Binder $binder The binder to compare against $this + * + * @return bool true if they are equal, or false if they are not equal + */ + public function equals(Horde_Injector_Binder $binder) + { + return false; + } +} + +$a = new Horde_Injector(new Horde_Injector_TopLevel()); +$a->addBinder('constructed', new Binder()); +var_dump($a->getInstance('constructed')); \ No newline at end of file diff --git a/framework/Injector/examples/Horde/Injector/factory.php b/framework/Injector/examples/Horde/Injector/factory.php new file mode 100644 index 000000000..a4bd4e71c --- /dev/null +++ b/framework/Injector/examples/Horde/Injector/factory.php @@ -0,0 +1,40 @@ + + * @license http://opensource.org/licenses/bsd-license.php BSD + * @link http://pear.horde.org/index.php?package=Injector + */ + +require_once 'Horde/Autoloader.php'; + +class Greet +{ + public function __construct($somebody) + { + $this->somebody = $somebody; + } + + public function greet() + { + print 'Hello ' . $this->somebody; + } +} + +class Factory +{ + static public function getGreeter(Horde_Injector $injector) + { + return new Greet($injector->getInstance('Person')); + } +} + +$a = new Horde_Injector(new Horde_Injector_TopLevel()); +$a->setInstance('Person', 'Bob'); +$a->bindFactory('Greet', 'Factory', 'getGreeter'); +$a->getInstance('Greet')->greet(); \ No newline at end of file diff --git a/framework/Injector/examples/Horde/Injector/implementation.php b/framework/Injector/examples/Horde/Injector/implementation.php new file mode 100644 index 000000000..eb488eb5e --- /dev/null +++ b/framework/Injector/examples/Horde/Injector/implementation.php @@ -0,0 +1,50 @@ + + * @license http://opensource.org/licenses/bsd-license.php BSD + * @link http://pear.horde.org/index.php?package=Injector + */ + +require_once 'Horde/Autoloader.php'; + +interface Person +{ + public function __toString(); +} + +class World implements Person +{ + public function __toString() + { + return 'World'; + } +} + +interface Greeter +{ + public function greet(); +} + +class Hello implements Greeter +{ + public function __construct(Person $somebody) + { + $this->somebody = $somebody; + } + + public function greet() + { + print 'Hello ' . $this->somebody; + } +} + +$a = new Horde_Injector(new Horde_Injector_TopLevel()); +$a->bindImplementation('Person', 'World'); +$a->bindImplementation('Greeter', 'Hello'); +$a->getInstance('Greeter')->greet(); \ No newline at end of file diff --git a/framework/Injector/examples/Horde/Injector/setget.php b/framework/Injector/examples/Horde/Injector/setget.php new file mode 100644 index 000000000..a2e0543b3 --- /dev/null +++ b/framework/Injector/examples/Horde/Injector/setget.php @@ -0,0 +1,18 @@ + + * @license http://opensource.org/licenses/bsd-license.php BSD + * @link http://pear.horde.org/index.php?package=Injector + */ + +require_once 'Horde/Autoloader.php'; + +$a = new Horde_Injector(new Horde_Injector_TopLevel()); +$a->setInstance('a', 'a'); +var_dump($a->getInstance('a')); -- 2.11.0