diff options
author | Tristan Darricau <github@nicofuma.fr> | 2017-07-04 16:39:18 +0200 |
---|---|---|
committer | Marc Alexander <admin@m-a-styles.de> | 2019-05-08 22:05:41 +0200 |
commit | deb556fbf05eeec447234f15f4eada58526f0b81 (patch) | |
tree | 582c3943fb023e22f32b1767a6f66c65025d73e6 /phpBB/phpbb/di/service_collection.php | |
parent | 574749daebe28cdb0d07b01394503d0453d9ff31 (diff) | |
download | forums-deb556fbf05eeec447234f15f4eada58526f0b81.tar forums-deb556fbf05eeec447234f15f4eada58526f0b81.tar.gz forums-deb556fbf05eeec447234f15f4eada58526f0b81.tar.bz2 forums-deb556fbf05eeec447234f15f4eada58526f0b81.tar.xz forums-deb556fbf05eeec447234f15f4eada58526f0b81.zip |
[ticket/15258] Adds a method to get a service by class in service_collection
PHPBB3-15258
Diffstat (limited to 'phpBB/phpbb/di/service_collection.php')
-rw-r--r-- | phpBB/phpbb/di/service_collection.php | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/phpBB/phpbb/di/service_collection.php b/phpBB/phpbb/di/service_collection.php index 8e9175e204..8c1c172e36 100644 --- a/phpBB/phpbb/di/service_collection.php +++ b/phpBB/phpbb/di/service_collection.php @@ -103,4 +103,35 @@ class service_collection extends \ArrayObject { return $this->service_classes; } + + /** + * Returns the service associated to a class + * + * @return mixed + * @throw \RuntimeException if the + */ + public function get_by_class($class) + { + $service_id = null; + + foreach ($this->service_classes as $id => $service_class) + { + if ($service_class === $class) + { + if ($service_id !== null) + { + throw new \RuntimeException('More than one service definitions found for class "'.$class.'" in collection.'); + } + + $service_id = $id; + } + } + + if ($service_id === null) + { + throw new \RuntimeException('No service found for class "'.$class.'" in collection.'); + } + + return $this->offsetGet($service_id); + } } |