Вход Регистрация
Файл: concrete5.7.5.6/concrete/vendor/zendframework/zend-servicemanager/src/Proxy/LazyServiceFactory.php
Строк: 96
<?php
/**
 * Zend Framework (http://framework.zend.com/)
 *
 * @link      http://github.com/zendframework/zf2 for the canonical source repository
 * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
 * @license   http://framework.zend.com/license/new-bsd New BSD License
 */

namespace ZendServiceManagerProxy;

use 
ProxyManagerFactoryLazyLoadingValueHolderFactory;

use 
ProxyManagerProxyLazyLoadingInterface;
use 
ZendServiceManagerDelegatorFactoryInterface;
use 
ZendServiceManagerException;
use 
ZendServiceManagerServiceLocatorInterface;

/**
 * Delegator factory responsible of instantiating lazy loading value holder proxies of
 * given services at runtime
 *
 * @link https://github.com/Ocramius/ProxyManager/blob/master/docs/lazy-loading-value-holder.md
 */
class LazyServiceFactory implements DelegatorFactoryInterface
{
    
/**
     * @var ProxyManagerFactoryLazyLoadingValueHolderFactory
     */
    
protected $proxyFactory;

    
/**
     * @var string[] map of service names to class names
     */
    
protected $servicesMap;

    
/**
     * @param LazyLoadingValueHolderFactory $proxyFactory
     * @param string[]                      $servicesMap  a map of service names to class names of their
     *                                                    respective classes
     */
    
public function __construct(LazyLoadingValueHolderFactory $proxyFactory, array $servicesMap)
    {
        
$this->proxyFactory $proxyFactory;
        
$this->servicesMap  $servicesMap;
    }

    
/**
     * {@inheritDoc}
     *
     * @return object|ProxyManagerProxyLazyLoadingInterface|ProxyManagerProxyValueHolderInterface
     */
    
public function createDelegatorWithName(ServiceLocatorInterface $serviceLocator$name$requestedName$callback)
    {
        
$initializer = function (& $wrappedInstanceLazyLoadingInterface $proxy) use ($callback) {
            
$proxy->setProxyInitializer(null);

            
$wrappedInstance call_user_func($callback);

            return 
true;
        };

        if (isset(
$this->servicesMap[$requestedName])) {
            return 
$this->proxyFactory->createProxy($this->servicesMap[$requestedName], $initializer);
        } elseif (isset(
$this->servicesMap[$name])) {
            return 
$this->proxyFactory->createProxy($this->servicesMap[$name], $initializer);
        }

        throw new 
ExceptionInvalidServiceNameException(
            
sprintf('The requested service "%s" was not found in the provided services map'$requestedName)
        );
    }
}
Онлайн: 1
Реклама