for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Laganica\Di\Resolver;
use InvalidArgumentException;
use Laganica\Di\Definition\ClosureDefinition;
use Laganica\Di\Definition\DefinitionInterface;
use Laganica\Di\Definition\FactoryDefinition;
use Laganica\Di\Exception\ContainerException;
use Laganica\Di\FactoryInterface;
/**
* Class FactoryResolver
*
* @package Laganica\Di\Resolver
*/
class FactoryResolver extends Resolver
{
* @inheritDoc
public function resolve(DefinitionInterface $definition)
if (!$definition instanceof FactoryDefinition) {
$actualType = gettype($definition);
$expectedType = FactoryDefinition::class;
throw new InvalidArgumentException("Argument \$definition must be $expectedType, $actualType given");
}
$factoryClass = $definition->getFactoryClass();
$factoryInterface = FactoryInterface::class;
$interfaces = class_implements($factoryClass);
if (empty($interfaces) || !in_array($factoryInterface, $interfaces, true)) {
throw new ContainerException("$factoryClass must implement $factoryInterface");
return (new $factoryClass)($this->getContainer());