aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/di/service_collection.php
diff options
context:
space:
mode:
authorTristan Darricau <github@nicofuma.fr>2017-07-04 16:39:18 +0200
committerMarc Alexander <admin@m-a-styles.de>2019-05-08 22:05:41 +0200
commitdeb556fbf05eeec447234f15f4eada58526f0b81 (patch)
tree582c3943fb023e22f32b1767a6f66c65025d73e6 /phpBB/phpbb/di/service_collection.php
parent574749daebe28cdb0d07b01394503d0453d9ff31 (diff)
downloadforums-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.php31
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);
+ }
}