1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
<?php
namespace OneOfZero\Json\Helpers;
use Interop\Container\ContainerInterface;
use ReflectionClass;
use RuntimeException;
class ObjectHelper
{
public static function getInstance($type, ContainerInterface $container = null, $skipConstructor = false)
{
if ($type === null)
{
throw new RuntimeException("No type specified");
}
if (is_object($type))
{
return $type;
}
if ($container !== null)
{
if ($container->has($type))
{
return $container->get($type);
}
}
if (class_exists($type))
{
$class = new ReflectionClass($type);
if ($class->isAbstract())
{
throw new RuntimeException("Cannot instantiate class \"$type\", because is not a concrete type");
}
if ($skipConstructor)
{
return $class->newInstanceWithoutConstructor();
}
if ($class->getConstructor() !== null && $class->getConstructor()->getNumberOfRequiredParameters() > 0)
{
throw new RuntimeException("The constructor of class \"$type\" has more than 0 required arguments");
}
return $class->newInstance();
}
throw new RuntimeException("Cannot get instance for class \"$type\"");
}
}