From e1a3ef8b3f0595a47d8c6e213beaad49ed4f813d Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Tue, 11 Feb 2014 15:10:17 +0100 Subject: [PATCH] [DependencyInjection] made some perf improvements --- .../DependencyInjection/Dumper/PhpDumper.php | 43 ++++++------------- .../Tests/Fixtures/php/services1-1.php | 6 ++- .../Tests/Fixtures/php/services1.php | 6 ++- .../Tests/Fixtures/php/services10.php | 27 ++++-------- .../Tests/Fixtures/php/services11.php | 4 +- .../Tests/Fixtures/php/services8.php | 24 ++++------- .../Tests/Fixtures/php/services9.php | 22 +++------- .../Tests/Fixtures/php/services9_compiled.php | 29 ++++--------- 8 files changed, 57 insertions(+), 104 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php index 3e5de6cb82..1311fb0551 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php @@ -800,16 +800,18 @@ EOF; */ private function addConstructor() { - $arguments = $this->container->getParameterBag()->all() ? 'new ParameterBag($this->getDefaultParameters())' : null; + $parameters = $this->exportParameters($this->container->getParameterBag()->all()); $code = <<exportParameters($this->container->getParameterBag()->all()); + $code = <<container->getParameterBag()->all()) { - $code .= "\n \$this->parameters = \$this->getDefaultParameters();\n"; - } - - $code .= <<services = \$this->scopedServices = \$this->scopeStacks = array(); @@ -961,8 +957,6 @@ EOF; return ''; } - $parameters = $this->exportParameters($this->container->getParameterBag()->all()); - $code = ''; if ($this->container->isFrozen()) { $code .= <<parameters[\$name]) || array_key_exists(\$name, \$this->parameters))) { + if (!(isset(self::\$parameters[\$name]) || array_key_exists(\$name, self::\$parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', \$name)); } - return \$this->parameters[\$name]; + return self::\$parameters[\$name]; } /** @@ -988,7 +982,7 @@ EOF; { \$name = strtolower(\$name); - return isset(\$this->parameters[\$name]) || array_key_exists(\$name, \$this->parameters); + return isset(self::\$parameters[\$name]) || array_key_exists(\$name, self::\$parameters); } /** @@ -1005,28 +999,15 @@ EOF; public function getParameterBag() { if (null === \$this->parameterBag) { - \$this->parameterBag = new FrozenParameterBag(\$this->parameters); + \$this->parameterBag = new FrozenParameterBag(self::\$parameters); } return \$this->parameterBag; } + EOF; } - $code .= << '', + 'some_string' => '-', + ); /** * Constructor. */ public function __construct() { - $this->parameters = $this->getDefaultParameters(); - $this->services = $this->scopedServices = $this->scopeStacks = array(); @@ -68,11 +69,11 @@ class ProjectServiceContainer extends Container { $name = strtolower($name); - if (!(isset($this->parameters[$name]) || array_key_exists($name, $this->parameters))) { + if (!(isset(self::$parameters[$name]) || array_key_exists($name, self::$parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); } - return $this->parameters[$name]; + return self::$parameters[$name]; } /** @@ -82,7 +83,7 @@ class ProjectServiceContainer extends Container { $name = strtolower($name); - return isset($this->parameters[$name]) || array_key_exists($name, $this->parameters); + return isset(self::$parameters[$name]) || array_key_exists($name, self::$parameters); } /** @@ -99,21 +100,9 @@ class ProjectServiceContainer extends Container public function getParameterBag() { if (null === $this->parameterBag) { - $this->parameterBag = new FrozenParameterBag($this->parameters); + $this->parameterBag = new FrozenParameterBag(self::$parameters); } return $this->parameterBag; } - /** - * Gets the default parameters. - * - * @return array An array of the default parameters - */ - protected function getDefaultParameters() - { - return array( - 'empty_value' => '', - 'some_string' => '-', - ); - } } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services11.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services11.php index ada46e9412..2d8a61fb2d 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services11.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services11.php @@ -16,7 +16,9 @@ use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag; */ class ProjectServiceContainer extends Container { - private $parameters; + private static $parameters = array( + + ); /** * Constructor. diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php index f922d2000c..7c50647d4e 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php @@ -16,22 +16,7 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; */ class ProjectServiceContainer extends Container { - /** - * Constructor. - */ - public function __construct() - { - parent::__construct(new ParameterBag($this->getDefaultParameters())); - } - - /** - * Gets the default parameters. - * - * @return array An array of the default parameters - */ - protected function getDefaultParameters() - { - return array( + private static $parameters = array( 'foo' => '%baz%', 'baz' => 'bar', 'bar' => 'foo is %%foo bar', @@ -47,5 +32,12 @@ class ProjectServiceContainer extends Container 7 => 'null', ), ); + + /** + * Constructor. + */ + public function __construct() + { + parent::__construct(new ParameterBag(self::$parameters)); } } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php index 4ca34ef9ae..68199d3092 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php @@ -16,12 +16,18 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; */ class ProjectServiceContainer extends Container { + private static $parameters = array( + 'baz_class' => 'BazClass', + 'foo_class' => 'Bar\\FooClass', + 'foo' => 'bar', + ); + /** * Constructor. */ public function __construct() { - parent::__construct(new ParameterBag($this->getDefaultParameters())); + parent::__construct(new ParameterBag(self::$parameters)); $this->methodMap = array( 'bar' => 'getBarService', 'baz' => 'getBazService', @@ -370,18 +376,4 @@ class ProjectServiceContainer extends Container return $instance; } - - /** - * Gets the default parameters. - * - * @return array An array of the default parameters - */ - protected function getDefaultParameters() - { - return array( - 'baz_class' => 'BazClass', - 'foo_class' => 'Bar\\FooClass', - 'foo' => 'bar', - ); - } } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_compiled.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_compiled.php index bf47e8216c..873893fa96 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_compiled.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_compiled.php @@ -16,15 +16,17 @@ use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag; */ class ProjectServiceContainer extends Container { - private $parameters; + private static $parameters = array( + 'baz_class' => 'BazClass', + 'foo_class' => 'Bar\\FooClass', + 'foo' => 'bar', + ); /** * Constructor. */ public function __construct() { - $this->parameters = $this->getDefaultParameters(); - $this->services = $this->scopedServices = $this->scopeStacks = array(); @@ -320,11 +322,11 @@ class ProjectServiceContainer extends Container { $name = strtolower($name); - if (!(isset($this->parameters[$name]) || array_key_exists($name, $this->parameters))) { + if (!(isset(self::$parameters[$name]) || array_key_exists($name, self::$parameters))) { throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name)); } - return $this->parameters[$name]; + return self::$parameters[$name]; } /** @@ -334,7 +336,7 @@ class ProjectServiceContainer extends Container { $name = strtolower($name); - return isset($this->parameters[$name]) || array_key_exists($name, $this->parameters); + return isset(self::$parameters[$name]) || array_key_exists($name, self::$parameters); } /** @@ -351,22 +353,9 @@ class ProjectServiceContainer extends Container public function getParameterBag() { if (null === $this->parameterBag) { - $this->parameterBag = new FrozenParameterBag($this->parameters); + $this->parameterBag = new FrozenParameterBag(self::$parameters); } return $this->parameterBag; } - /** - * Gets the default parameters. - * - * @return array An array of the default parameters - */ - protected function getDefaultParameters() - { - return array( - 'baz_class' => 'BazClass', - 'foo_class' => 'Bar\\FooClass', - 'foo' => 'bar', - ); - } }