private function addNewInstance($id, Definition $definition, $return, $instantiation) {
$class = $this
->dumpValue($definition
->getClass());
$arguments = array();
foreach ($definition
->getArguments() as $value) {
$arguments[] = $this
->dumpValue($value);
}
if (null !== $definition
->getFactoryMethod()) {
if (null !== $definition
->getFactoryClass()) {
return sprintf(" {$return}{$instantiation}call_user_func(array(%s, '%s')%s);\n", $this
->dumpValue($definition
->getFactoryClass()), $definition
->getFactoryMethod(), $arguments ? ', ' . implode(', ', $arguments) : '');
}
if (null !== $definition
->getFactoryService()) {
return sprintf(" {$return}{$instantiation}%s->%s(%s);\n", $this
->getServiceCall($definition
->getFactoryService()), $definition
->getFactoryMethod(), implode(', ', $arguments));
}
throw new RuntimeException(sprintf('Factory method requires a factory service or factory class in service definition for %s', $id));
}
if (false !== strpos($class, '$')) {
return sprintf(" \$class = %s;\n\n {$return}{$instantiation}new \$class(%s);\n", $class, implode(', ', $arguments));
}
return sprintf(" {$return}{$instantiation}new \\%s(%s);\n", substr(str_replace('\\\\', '\\', $class), 1, -1), implode(', ', $arguments));
}