ENH Faster method for creating injected instances (#10265)

This commit is contained in:
Steve Boyd 2022-03-23 10:39:58 +13:00 committed by GitHub
parent 76bd8a116a
commit 78c9aea61f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 5 additions and 16 deletions

View File

@ -2,29 +2,18 @@
namespace SilverStripe\Core\Injector;
use ReflectionClass;
use ReflectionException;
/**
* A class for creating new objects by the injector.
*/
class InjectionCreator implements Factory
{
public function create($class, array $params = [])
{
try {
$reflector = new ReflectionClass($class);
} catch (ReflectionException $e) {
throw new InjectorNotFoundException($e);
if (!class_exists($class)) {
throw new InjectorNotFoundException("Class {$class} does not exist");
}
if (count($params)) {
// Remove named keys to ensure that PHP7 and PHP8 interpret these the same way
$params = array_values($params);
return $reflector->newInstanceArgs($params);
}
return $reflector->newInstance();
// Ensure there are no string keys as they cannot be unpacked with the `...` operator
$values = array_values($params);
return new $class(...$values);
}
}