Doctrine\ODM\OrientDB\Proxy\ProxyFactory::createCloner PHP Метод

createCloner() приватный Метод

Generates a closure capable of finalizing a cloned proxy
private createCloner ( Doctrine\Common\Persistence\Mapping\ClassMetadata $classMetadata, Hydrator $hydrator, ReflectionProperty $reflectionId ) : Closure
$classMetadata Doctrine\Common\Persistence\Mapping\ClassMetadata
$hydrator Doctrine\ODM\OrientDB\Mapper\Hydration\Hydrator
$reflectionId ReflectionProperty
Результат Closure
    private function createCloner(BaseClassMetadata $classMetadata, Hydrator $hydrator, \ReflectionProperty $reflectionId)
    {
        return function (BaseProxy $proxy) use($reflectionId, $hydrator, $classMetadata) {
            if ($proxy->__isInitialized()) {
                return;
            }
            $proxy->__setInitialized(true);
            $proxy->__setInitializer(null);
            $rid = $reflectionId->getValue($proxy);
            $original = $hydrator->load(array($rid));
            if (null === $original) {
                throw DocumentNotFoundException::documentNotFound(get_class($proxy), $rid);
            }
            $original = $hydrator->hydrate($original[0], $proxy);
            foreach ($classMetadata->getReflectionClass()->getProperties() as $reflectionProperty) {
                $propertyName = $reflectionProperty->getName();
                if ($classMetadata->hasField($propertyName) || $classMetadata->hasAssociation($propertyName)) {
                    $reflectionProperty->setAccessible(true);
                    $reflectionProperty->setValue($proxy, $reflectionProperty->getValue($original));
                }
            }
        };
    }