| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | <?php/* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */namespace Symfony\Component\DependencyInjection\Argument;use Symfony\Component\DependencyInjection\ServiceLocator as BaseServiceLocator;/** * @author Nicolas Grekas <p@tchwork.com> * * @internal */class ServiceLocator extends BaseServiceLocator{    private $factory;    private $serviceMap;    private $serviceTypes;    public function __construct(\Closure $factory, array $serviceMap, ?array $serviceTypes = null)    {        $this->factory = $factory;        $this->serviceMap = $serviceMap;        $this->serviceTypes = $serviceTypes;        parent::__construct($serviceMap);    }    /**     * {@inheritdoc}     *     * @return mixed     */    public function get(string $id)    {        return isset($this->serviceMap[$id]) ? ($this->factory)(...$this->serviceMap[$id]) : parent::get($id);    }    /**     * {@inheritdoc}     */    public function getProvidedServices(): array    {        return $this->serviceTypes ?? $this->serviceTypes = array_map(function () { return '?'; }, $this->serviceMap);    }}
 |