[DependencyInjection] made a speed optimization
This commit is contained in:
parent
ee3e298c5d
commit
c9d0a73fe3
@ -174,6 +174,18 @@ class Builder extends Container
|
||||
$this->aliases[$alias] = $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if an alias exists under the given identifier.
|
||||
*
|
||||
* @param string $id The service identifier
|
||||
*
|
||||
* @return Boolean true if the alias exists, false otherwise
|
||||
*/
|
||||
public function hasAlias($id)
|
||||
{
|
||||
return array_key_exists($id, $this->aliases);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all defined aliases.
|
||||
*
|
||||
@ -184,6 +196,25 @@ class Builder extends Container
|
||||
return $this->aliases;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an alias.
|
||||
*
|
||||
* @param string $id The service identifier
|
||||
*
|
||||
* @return string The aliased service identifier
|
||||
*
|
||||
* @throws \InvalidArgumentException if the alias does not exist
|
||||
*/
|
||||
public function getAlias($id)
|
||||
{
|
||||
if (!$this->hasAlias($id))
|
||||
{
|
||||
throw new \InvalidArgumentException(sprintf('The service alias "%s" does not exist.', $id));
|
||||
}
|
||||
|
||||
return $this->aliases[$id];
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a service definition.
|
||||
*
|
||||
|
@ -442,7 +442,7 @@ EOF;
|
||||
|
||||
protected function getServiceCall($id, Reference $reference = null)
|
||||
{
|
||||
if ('service_container' == $id)
|
||||
if ('service_container' === $id)
|
||||
{
|
||||
return '$this';
|
||||
}
|
||||
@ -453,7 +453,14 @@ EOF;
|
||||
}
|
||||
else
|
||||
{
|
||||
return sprintf('$this->getService(\'%s\')', $id);
|
||||
if ($this->container->hasDefinition($id) || $this->container->hasAlias($id))
|
||||
{
|
||||
return sprintf('$this->get%sService()', Container::camelize($id));
|
||||
}
|
||||
else
|
||||
{
|
||||
return sprintf('$this->getService(\'%s\')', $id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ class ProjectServiceContainer extends Container
|
||||
{
|
||||
require_once '%path%/foo.php';
|
||||
|
||||
$instance = call_user_func(array('FooClass', 'getInstance'), 'foo', $this->getService('foo.baz'), array($this->getParameter('foo') => 'foo is '.$this->getParameter('foo'), 'bar' => $this->getParameter('foo')), true, $this);
|
||||
$instance = call_user_func(array('FooClass', 'getInstance'), 'foo', $this->getFoo_BazService(), array($this->getParameter('foo') => 'foo is '.$this->getParameter('foo'), 'bar' => $this->getParameter('foo')), true, $this);
|
||||
$instance->setBar('bar');
|
||||
$instance->initialize();
|
||||
sc_configure($instance);
|
||||
@ -58,8 +58,8 @@ class ProjectServiceContainer extends Container
|
||||
{
|
||||
if (isset($this->shared['bar'])) return $this->shared['bar'];
|
||||
|
||||
$instance = new FooClass('foo', $this->getService('foo.baz'), $this->getParameter('foo_bar'));
|
||||
$this->getService('foo.baz')->configure($instance);
|
||||
$instance = new FooClass('foo', $this->getFoo_BazService(), $this->getParameter('foo_bar'));
|
||||
$this->getFoo_BazService()->configure($instance);
|
||||
|
||||
return $this->shared['bar'] = $instance;
|
||||
}
|
||||
@ -113,7 +113,7 @@ class ProjectServiceContainer extends Container
|
||||
if (isset($this->shared['method_call1'])) return $this->shared['method_call1'];
|
||||
|
||||
$instance = new FooClass();
|
||||
$instance->setBar($this->getService('foo'));
|
||||
$instance->setBar($this->getFooService());
|
||||
$instance->setBar($this->getService('foo', Container::NULL_ON_INVALID_REFERENCE));
|
||||
if ($this->hasService('foo'))
|
||||
{
|
||||
@ -134,7 +134,7 @@ class ProjectServiceContainer extends Container
|
||||
*/
|
||||
protected function getAliasForFooService()
|
||||
{
|
||||
return $this->getService('foo');
|
||||
return $this->getFooService();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -17,7 +17,7 @@ use Symfony\Components\DependencyInjection\Reference;
|
||||
|
||||
$fixturesPath = __DIR__.'/../../../../fixtures/Symfony/Components/DependencyInjection/';
|
||||
|
||||
$t = new LimeTest(55);
|
||||
$t = new LimeTest(59);
|
||||
|
||||
// ->setDefinitions() ->addDefinitions() ->getDefinitions() ->setDefinition() ->getDefinition() ->hasDefinition()
|
||||
$t->diag('->setDefinitions() ->addDefinitions() ->getDefinitions() ->setDefinition() ->getDefinition() ->hasDefinition()');
|
||||
@ -89,7 +89,7 @@ try
|
||||
@$builder->getService('baz');
|
||||
$t->fail('->getService() throws a LogicException if the service has a circular reference to itself');
|
||||
}
|
||||
catch (LogicException $e)
|
||||
catch (\LogicException $e)
|
||||
{
|
||||
$t->pass('->getService() throws a LogicException if the service has a circular reference to itself');
|
||||
}
|
||||
@ -105,14 +105,27 @@ $builder->bar = $bar = new stdClass();
|
||||
$builder->register('bar', 'stdClass');
|
||||
$t->is($builder->getServiceIds(), array('foo', 'bar', 'service_container'), '->getServiceIds() returns all defined service ids');
|
||||
|
||||
// ->setAlias()
|
||||
$t->diag('->setAlias()');
|
||||
// ->setAlias() ->getAlias() ->hasAlias()
|
||||
$t->diag('->setAlias() ->getAlias() ->hasAlias()');
|
||||
$builder = new Builder();
|
||||
$builder->register('foo', 'stdClass');
|
||||
$builder->setAlias('bar', 'foo');
|
||||
$t->ok($builder->hasAlias('bar'), '->hasAlias() returns true if the alias exists');
|
||||
$t->ok(!$builder->hasAlias('foobar'), '->hasAlias() returns false if the alias does not exist');
|
||||
$t->is($builder->getAlias('bar'), 'foo', '->getAlias() returns the aliased service');
|
||||
$t->ok($builder->hasService('bar'), '->setAlias() defines a new service');
|
||||
$t->ok($builder->getService('bar') === $builder->getService('foo'), '->setAlias() creates a service that is an alias to another one');
|
||||
|
||||
try
|
||||
{
|
||||
$builder->getAlias('foobar');
|
||||
$t->fail('->getAlias() throws an InvalidArgumentException if the alias does not exist');
|
||||
}
|
||||
catch (\InvalidArgumentException $e)
|
||||
{
|
||||
$t->pass('->getAlias() throws an InvalidArgumentException if the alias does not exist');
|
||||
}
|
||||
|
||||
// ->getAliases()
|
||||
$t->diag('->getAliases()');
|
||||
$builder = new Builder();
|
||||
@ -186,7 +199,7 @@ try
|
||||
$builder->getService('foo4');
|
||||
$t->fail('->createService() throws an InvalidArgumentException if the configure callable is not a valid callable');
|
||||
}
|
||||
catch (InvalidArgumentException $e)
|
||||
catch (\InvalidArgumentException $e)
|
||||
{
|
||||
$t->pass('->createService() throws an InvalidArgumentException if the configure callable is not a valid callable');
|
||||
}
|
||||
|
Reference in New Issue
Block a user