diff options
| author | Tristan Darricau <github@nicofuma.fr> | 2014-05-21 23:09:25 +0200 |
|---|---|---|
| committer | Tristan Darricau <github@nicofuma.fr> | 2014-06-14 01:45:19 +0200 |
| commit | a0985c7a22014ac1b354f95195d26fd002bf1374 (patch) | |
| tree | 654b2ea846b9706eab928c0bf04abf8287b570d7 /phpBB/phpbb/di/service_collection_iterator.php | |
| parent | a4c15bbf4f108604d1839648662f6ef26b77930e (diff) | |
| download | forums-a0985c7a22014ac1b354f95195d26fd002bf1374.tar forums-a0985c7a22014ac1b354f95195d26fd002bf1374.tar.gz forums-a0985c7a22014ac1b354f95195d26fd002bf1374.tar.bz2 forums-a0985c7a22014ac1b354f95195d26fd002bf1374.tar.xz forums-a0985c7a22014ac1b354f95195d26fd002bf1374.zip | |
[ticket/12575] Move service_collection_iterator to its own file
PHPBB3-12575
Diffstat (limited to 'phpBB/phpbb/di/service_collection_iterator.php')
| -rw-r--r-- | phpBB/phpbb/di/service_collection_iterator.php | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/phpBB/phpbb/di/service_collection_iterator.php b/phpBB/phpbb/di/service_collection_iterator.php new file mode 100644 index 0000000000..ace66d1906 --- /dev/null +++ b/phpBB/phpbb/di/service_collection_iterator.php @@ -0,0 +1,65 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2011 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\di; + +use Symfony\Component\DependencyInjection\ContainerInterface; + +/** +* Iterator which load the services when they are requested +* +* @package phpBB3 +*/ +class service_collection_iterator extends \ArrayIterator +{ + protected $container; + + /** + * Construct an ArrayIterator for service_collection + * + * @param ContainerInterface $container Container object + * @param array $array The array or object to be iterated on. + * @param int $flags Flags to control the behaviour of the ArrayObject object. + * @see ArrayObject::setFlags() + */ + public function __construct(ContainerInterface $container, $array = array(), $flags = 0) + { + parent::__construct($array, $flags); + $this->container = $container; + } + + /** + * {@inheritdoc} + */ + public function offsetGet($index) + { + if (($task = parent::offsetGet($index)) == null) + { + $task = $this->container->get($index); + $this->offsetSet($index, $task); + } + + return $task; + } + + /** + * {@inheritdoc} + */ + public function current() + { + if (($task = parent::current()) == null) + { + $name = $this->key(); + $task = $this->container->get($name); + $this->offsetSet($name, $task); + } + + return $task; + } +} |
