2017 © Pedro Peláez
 

library class-resolver

Retrieve an object from a class name.

image

kassko/class-resolver

Retrieve an object from a class name.

  • Thursday, June 2, 2016
  • by kassko
  • Repository
  • 1 Watchers
  • 0 Stars
  • 13,536 Installations
  • PHP
  • 2 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 15 Versions
  • 2 % Grown

The README.md

class-resolver

Latest Stable Version Total Downloads Latest Unstable Version, (*1)

Allows to create an object with dependencies from it's class name., (*2)

Installation

You can install this component with composer composer require kassko/class-resolver:some_version, (*3)

Usage

Use the class-resolver

Imagine, you need to create a cache instance and you have only the cache class name., (*4)

In the simpliest case, you can go for such code:, (*5)

class ClientClass
{
    /**
     * @var string
     */
    private $cacheClass;

    public function __construct($cacheClass)
    {
        $this->cacheClass = $cacheClass;
    }

    public function clientFunction()
    {
        //...
        $myCacheInstance = new $this->cacheClass;
        //...
    }
}

If the cache class has some dependencies, you can use the class-resolver and go through this kind of code:, (*6)

use Kassko\ClassResolver\ClassResolverInterface;

class ClientClass
{
    /**
     * @var string
     */
    private $cacheClass;
    /**
     * @var ClassResolverInterface $classResolver
     */
    private $classResolver;

    public function __construct($cacheClass, ClassResolverInterface $classResolver)
    {
        $this->cacheClass = $cacheClass;
        $this->classResolver = $classResolver;
    }

    public function clientFunction()
    {
        //...
        $myCacheInstance = $this->classResolver->resolve($this->cacheClass);
        //...
    }
}

If you need to handle yourself the case when the class cannot be resolved with the class-resolver, you can go through such code:, (*7)

use Kassko\ClassResolver\ClassResolverInterface;

class ClientClass
{
    /**
     * @var string
     */
    private $cacheClass;
    /**
     * @var ClassResolverInterface $classResolver
     */
    private $classResolver;

    public function __construct($cacheClass, ClassResolverInterface $classResolver)
    {
        $this->cacheClass = $cacheClass;
        $this->classResolver = $classResolver;
    }

    public function clientFunction()
    {
        //...
        if ($this->classResolver->support($this->cacheClass)) {
            $myCacheInstance = $this->classResolver->resolve($this->cacheClass);
        } else {
            //Here, the code that handle the case when the class cannot be resolved.
        }
        //...
    }
}

Feed the class-resolver

There are severals ways to feed the class-resolver. Each way of feeding has it's own class-resolver implementation., (*8)

From a map Kassko\ClassResolver\MapClassResolver

use Kassko\ClassResolver\MapClassResolver;

$mapClassResolver = new MapClassResolver(['Kassko\Sample\CacheClass' => $cacheInstance]);

You can use a closure for lazy loading:, (*9)

use Kassko\ClassResolver\MapClassResolver;

$mapClassResolver = new MapClassResolver(['Kassko\Sample\CacheClass' => function () use ($cacheInstance) {return new Kassko\Sample\CacheClass(new Kassko\Sample\Dependency);};

From a container by providing the get method, and the has method.

$classResolver = new VariableContainerAwareClassResolver($container, 'get', 'has');

The get method is the method that resolves the service and the has method is the method that checks if the service exists., (*10)

From a container adapter that implements Kassko\ClassResolver\ContainerInterface

$container = new MyContainerAdapter($container);
$classResolver = new ContainerAwareClassResolver($container);

You can find an adapter in the bundle class-resolver-bundle. This is an adapter for Symfony container., (*11)

From a closure

$container = new MyContainerAdapter($container);
$cacheInstance = new Kassko\Sample\CacheClass($someDependency);

$classResolver = new ClosureClassResolver(function ($className) {
    switch ($className) use ($cacheInstance) {
        case 'Kassko\Sample\CacheClass':
            return $cacheInstance;
    }
});

From a factory

class CacheFactory
{
    public function supports($className) {return 'Kassko\Sample\CacheClass' === $className;} 
    public function get($className) {return new $className;} 
}

$factory = new FactoryAdapterClassResolver();
$classResolver = new ContainerAwareClassResolver($factory, 'supports', 'get');

From a static factory

class CacheFactory
{
    public static function supports($className) {return 'Kassko\Sample\CacheClass' === $className;} 
    public static function get($className) {return new $className;} 
}

$classResolver = new ContainerAwareClassResolver('StaticFactoryAdapterClassResolver', 'supports', 'get');

From others class-resolver

$classResolver = new ClassResolverChain();
$classResolver->add($mapClassResolver);
$classResolver->add($closureClassResolver);

If no resolver can handle the className, a basic new $className is performed., (*12)

You can change this behaviour so that an exception Kassko\ClassResolver\NotResolvedClassException is thrown instead., (*13)

use Kassko\ClassResolver\DefaultClassResolver;

$classResolver = new ClassResolverChain();
$classResolver->add($mapClassResolver);
$classResolver->add($closureClassResolver);
$classResolver->setDefaultResolver(new DefaultClassResolver(['throw_exception']));

Or you can provide your own default resolver implementation to setDefaultResolver() method., (*14)

The Versions

02/06 2016

dev-master

9999999-dev

Retrieve an object from a class name.

  Sources   Download

The Requires

  • php >=5.5.0

 

by Avatar kassko

class resolver factory dependency injection

02/06 2016

v0.3.3.0

0.3.3.0

Retrieve an object from a class name.

  Sources   Download

The Requires

  • php >=5.5.0

 

by Avatar kassko

class resolver factory dependency injection

02/06 2016

dev-kassko-new_resolvers

dev-kassko-new_resolvers

Retrieve an object from a class name.

  Sources   Download

The Requires

  • php >=5.5.0

 

by Avatar kassko

class resolver factory dependency injection

14/06 2015

v0.3.2.1

0.3.2.1

Retrieve an object from a class name.

  Sources   Download

The Requires

  • php >=5.5.0

 

by Avatar kassko

class resolver factory dependency injection

25/03 2015

v0.3.2.0

0.3.2.0

Retrieve an object from a class name.

  Sources   Download

The Requires

  • php >=5.5.0

 

by Avatar kassko

class resolver factory dependency injection

06/03 2015

v0.3.1.0-alpha

0.3.1.0-alpha

Retrieve an object from a class name.

  Sources   Download

The Requires

  • php >=5.5.0

 

by Avatar kassko

class resolver factory dependency injection

05/01 2015

v0.3.0.0-alpha

0.3.0.0-alpha

Retrieve an object from a class name.

  Sources   Download

The Requires

  • php >=5.5.0

 

by Avatar kassko

class resolver factory dependency injection

15/12 2014

0.2.0-alpha.6

0.2.0.0-alpha6

Retrieve an object from a class name.

  Sources   Download

The Requires

  • php >=5.5.0

 

by Avatar kassko

class resolver factory dependency injection

15/12 2014

0.2.0-alpha.5

0.2.0.0-alpha5

Retrieve an object from a class name.

  Sources   Download

The Requires

  • php >=5.5.0

 

by Avatar kassko

class resolver factory dependency injection

04/11 2014

0.2.0-alpha.4

0.2.0.0-alpha4

Allow to get a constructed object from a class name.

  Sources   Download

The Requires

  • php >=5.5.0

 

by Avatar kassko

class resolver factory dependency injection

02/11 2014

0.2.0-alpha.3

0.2.0.0-alpha3

Allow to get a constructed object from a class name.

  Sources   Download

The Requires

  • php >=5.5.0
  • kassko/common ~0.1

 

by Avatar kassko

class resolver factory dependency injection

27/10 2014

0.2.0-alpha.2

0.2.0.0-alpha2

Allow to get a constructed object from a class name.

  Sources   Download

The Requires

  • php >=5.5.0

 

by Avatar kassko

class resolver factory dependency injection

14/09 2014

0.1.2-alpha

0.1.2.0-alpha

Package to get an object from a class name with its dependencies.

  Sources   Download

The Requires

 

class resolver factory dependency injection

14/09 2014

0.1.1-alpha

0.1.1.0-alpha

Package to get an object from a class name with its dependencies.

  Sources   Download

The Requires

 

class resolver factory dependency injection

04/09 2014

0.1.0-alpha

0.1.0.0-alpha

Package to get an object from a class name with its dependencies.

  Sources   Download

The Requires

 

class resolver factory dependency injection