From 79938c6da59bcc30051fa68f929b128c512dc494 Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Mon, 20 Jan 2020 13:36:11 +0000 Subject: [PATCH] Issue #2962978 by govind.maloo, msankhala, jonathanshaw: Remove PHP5.5 performance optimisations in Container::createService and PhpArrayContainer::createService --- .../DependencyInjection/Container.php | 55 +------------------ .../DependencyInjection/PhpArrayContainer.php | 55 +------------------ 2 files changed, 2 insertions(+), 108 deletions(-) diff --git a/core/lib/Drupal/Component/DependencyInjection/Container.php b/core/lib/Drupal/Component/DependencyInjection/Container.php index 3e8b32b9c1c6..9594b6c796ea 100644 --- a/core/lib/Drupal/Component/DependencyInjection/Container.php +++ b/core/lib/Drupal/Component/DependencyInjection/Container.php @@ -256,60 +256,7 @@ protected function createService(array $definition, $id) { } else { $class = $this->frozen ? $definition['class'] : current($this->resolveServicesAndParameters([$definition['class']])); - $length = isset($definition['arguments_count']) ? $definition['arguments_count'] : count($arguments); - - // Optimize class instantiation for services with up to 10 parameters as - // ReflectionClass is noticeably slow. - switch ($length) { - case 0: - $service = new $class(); - break; - - case 1: - $service = new $class($arguments[0]); - break; - - case 2: - $service = new $class($arguments[0], $arguments[1]); - break; - - case 3: - $service = new $class($arguments[0], $arguments[1], $arguments[2]); - break; - - case 4: - $service = new $class($arguments[0], $arguments[1], $arguments[2], $arguments[3]); - break; - - case 5: - $service = new $class($arguments[0], $arguments[1], $arguments[2], $arguments[3], $arguments[4]); - break; - - case 6: - $service = new $class($arguments[0], $arguments[1], $arguments[2], $arguments[3], $arguments[4], $arguments[5]); - break; - - case 7: - $service = new $class($arguments[0], $arguments[1], $arguments[2], $arguments[3], $arguments[4], $arguments[5], $arguments[6]); - break; - - case 8: - $service = new $class($arguments[0], $arguments[1], $arguments[2], $arguments[3], $arguments[4], $arguments[5], $arguments[6], $arguments[7]); - break; - - case 9: - $service = new $class($arguments[0], $arguments[1], $arguments[2], $arguments[3], $arguments[4], $arguments[5], $arguments[6], $arguments[7], $arguments[8]); - break; - - case 10: - $service = new $class($arguments[0], $arguments[1], $arguments[2], $arguments[3], $arguments[4], $arguments[5], $arguments[6], $arguments[7], $arguments[8], $arguments[9]); - break; - - default: - $r = new \ReflectionClass($class); - $service = $r->newInstanceArgs($arguments); - break; - } + $service = new $class(...$arguments); } if (!isset($definition['shared']) || $definition['shared'] !== FALSE) { diff --git a/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php b/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php index 8a1523577150..be690488defa 100644 --- a/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php +++ b/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php @@ -80,60 +80,7 @@ protected function createService(array $definition, $id) { } else { $class = $this->frozen ? $definition['class'] : current($this->resolveServicesAndParameters([$definition['class']])); - $length = isset($definition['arguments_count']) ? $definition['arguments_count'] : count($arguments); - - // Optimize class instantiation for services with up to 10 parameters as - // reflection is noticeably slow. - switch ($length) { - case 0: - $service = new $class(); - break; - - case 1: - $service = new $class($arguments[0]); - break; - - case 2: - $service = new $class($arguments[0], $arguments[1]); - break; - - case 3: - $service = new $class($arguments[0], $arguments[1], $arguments[2]); - break; - - case 4: - $service = new $class($arguments[0], $arguments[1], $arguments[2], $arguments[3]); - break; - - case 5: - $service = new $class($arguments[0], $arguments[1], $arguments[2], $arguments[3], $arguments[4]); - break; - - case 6: - $service = new $class($arguments[0], $arguments[1], $arguments[2], $arguments[3], $arguments[4], $arguments[5]); - break; - - case 7: - $service = new $class($arguments[0], $arguments[1], $arguments[2], $arguments[3], $arguments[4], $arguments[5], $arguments[6]); - break; - - case 8: - $service = new $class($arguments[0], $arguments[1], $arguments[2], $arguments[3], $arguments[4], $arguments[5], $arguments[6], $arguments[7]); - break; - - case 9: - $service = new $class($arguments[0], $arguments[1], $arguments[2], $arguments[3], $arguments[4], $arguments[5], $arguments[6], $arguments[7], $arguments[8]); - break; - - case 10: - $service = new $class($arguments[0], $arguments[1], $arguments[2], $arguments[3], $arguments[4], $arguments[5], $arguments[6], $arguments[7], $arguments[8], $arguments[9]); - break; - - default: - $r = new \ReflectionClass($class); - $service = $r->newInstanceArgs($arguments); - break; - } + $service = new $class(...$arguments); } if (!isset($definition['shared']) || $definition['shared'] !== FALSE) { -- GitLab