diff options
Diffstat (limited to 'phpBB/phpbb/di/service_collection.php')
| -rw-r--r-- | phpBB/phpbb/di/service_collection.php | 50 | 
1 files changed, 33 insertions, 17 deletions
| diff --git a/phpBB/phpbb/di/service_collection.php b/phpBB/phpbb/di/service_collection.php index 8e9175e204..6298670c42 100644 --- a/phpBB/phpbb/di/service_collection.php +++ b/phpBB/phpbb/di/service_collection.php @@ -49,21 +49,6 @@ class service_collection extends \ArrayObject  		return new service_collection_iterator($this);  	} -	// Because of a PHP issue we have to redefine offsetExists -	// (even with a call to the parent): -	// 		https://bugs.php.net/bug.php?id=66834 -	// 		https://bugs.php.net/bug.php?id=67067 -	// But it triggers a sniffer issue that we have to skip -	// @codingStandardsIgnoreStart -	/** -	* {@inheritdoc} -	*/ -	public function offsetExists($index) -	{ -		return parent::offsetExists($index); -	} -	// @codingStandardsIgnoreEnd -  	/**  	* {@inheritdoc}  	*/ @@ -76,11 +61,11 @@ class service_collection extends \ArrayObject  	* Add a service to the collection  	*  	* @param string $name The service name -	* @return null +	* @return void  	*/  	public function add($name)  	{ -		$this->offsetSet($name, null); +		$this->offsetSet($name, false);  	}  	/** @@ -103,4 +88,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); +	}  } | 
