Skip to content

Commit c0258ca

Browse files
committed
ServiceDefinition: does deep clone
1 parent 8211907 commit c0258ca

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

src/DI/Compiler.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ public static function parseServices(ContainerBuilder $builder, array $config, $
273273
$builder->removeDefinition($name);
274274
$definition = $builder->addDefinition(
275275
$name,
276-
$parent === Config\Helpers::OVERWRITE ? NULL : unserialize(serialize($builder->getDefinition($parent))) // deep clone
276+
$parent === Config\Helpers::OVERWRITE ? NULL : clone $builder->getDefinition($parent)
277277
);
278278
} elseif ($builder->hasDefinition($name)) {
279279
$definition = $builder->getDefinition($name);

src/DI/ServiceDefinition.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,4 +302,11 @@ public function getInject()
302302
return $this->getTag(Extensions\InjectExtension::TAG_INJECT);
303303
}
304304

305+
306+
public function __clone()
307+
{
308+
$this->factory = unserialize(serialize($this->factory));
309+
$this->setup = unserialize(serialize($this->setup));
310+
}
311+
305312
}

tests/DI/ServiceDefinition.phpt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,15 @@ test(function () {
9494
Assert::equal([1, 2], $def->getTag('tag2'));
9595
Assert::equal(NULL, $def->getTag('tag3'));
9696
});
97+
98+
test(function () { // deep clone
99+
$def = new ServiceDefinition;
100+
$def->setFactory(new Statement('Class', [1, 2]));
101+
$def->addSetup(new Statement('Class', [1, 2]));
102+
103+
$dolly = clone $def;
104+
Assert::notSame($dolly->getFactory(), $def->getFactory());
105+
Assert::equal($dolly->getFactory(), $def->getFactory());
106+
Assert::notSame($dolly->getSetup(), $def->getSetup());
107+
Assert::equal($dolly->getSetup(), $def->getSetup());
108+
});

0 commit comments

Comments
 (0)