1<?php 2 3declare(strict_types=1); 4 5namespace JMS\Serializer\Construction; 6 7use Doctrine\Instantiator\Instantiator; 8use JMS\Serializer\DeserializationContext; 9use JMS\Serializer\Metadata\ClassMetadata; 10use JMS\Serializer\Visitor\DeserializationVisitorInterface; 11 12final class UnserializeObjectConstructor implements ObjectConstructorInterface 13{ 14 /** @var Instantiator */ 15 private $instantiator; 16 17 /** 18 * {@inheritdoc} 19 */ 20 public function construct(DeserializationVisitorInterface $visitor, ClassMetadata $metadata, $data, array $type, DeserializationContext $context): ?object 21 { 22 return $this->getInstantiator()->instantiate($metadata->name); 23 } 24 25 private function getInstantiator(): Instantiator 26 { 27 if (null === $this->instantiator) { 28 $this->instantiator = new Instantiator(); 29 } 30 31 return $this->instantiator; 32 } 33} 34