/** * Reconstitutes an object from a serialized object without calling the constructor. * * @param array $objectData The object data array * @return void * @author Andreas Förthner <*****@*****.**> */ protected function reconstituteObject(array $objectData) { $object = $this->createEmptyObject($objectData['className']); foreach ($objectData['properties'] as $propertyName => $propertyData) { switch ($propertyData['type']) { case 'simple': $propertyValue = $propertyData['value']; break; case 'array': $propertyValue = $this->reconstituteArray($propertyData['value']); break; case 'ArrayObject': $propertyValue = new \ArrayObject($this->reconstituteArray($propertyData['value'])); break; case 'object': $propertyValue = $this->reconstituteObject($this->objectsAsArray[$propertyData['value']]); break; case 'SplObjectStorage': $propertyValue = $this->reconstituteSplObjectStorage($propertyData['value']); break; case 'persistenceObject': $propertyValue = $this->reconstitutePersistenceObject($propertyData['value']['className'], $propertyData['value']['UUID']); break; } $reflectionProperty = new \ReflectionProperty(get_class($object), $propertyName); $reflectionProperty->setAccessible(TRUE); $reflectionProperty->setValue($object, $propertyValue); } $objectName = $this->objectManager->getObjectNameByClassName($objectData['className']); $objectConfigruation = $this->objectManager->getObjectConfiguration($objectName); $this->objectBuilder->reinjectDependencies($object, $objectConfigruation); $this->objectManager->registerShutdownObject($object, $objectConfigruation->getLifecycleShutdownMethodName()); return $object; }
/** * @test * @author Robert Lemke <*****@*****.**> */ public function registerShutdownObjectPutsAndObjectIntoTheListOfDisposableObjects() { $className = 'SomeClass' . uniqid(); $mockObject = $this->getMock($className); $objectManager = new \F3\FLOW3\Object\ObjectManager(); $objectManager->injectObjectBuilder($this->getMock('F3\\FLOW3\\Object\\ObjectBuilder')); $objectManager->injectObjectFactory($this->getMock('F3\\FLOW3\\Object\\ObjectFactoryInterface')); $objectManager->injectSingletonObjectsRegistry($this->getMock('F3\\FLOW3\\Object\\TransientRegistry')); $objectManager->injectReflectionService($this->getMock('F3\\FLOW3\\Reflection\\ReflectionService')); $objectManager->registerShutdownObject($mockObject, 'prepareLastWill'); $shutdownObjectsReflection = new \ReflectionProperty($objectManager, 'shutdownObjects'); $shutdownObjectsReflection->setAccessible(TRUE); $shutdownObjects = $shutdownObjectsReflection->getValue($objectManager); $expectedArray = array(spl_object_hash($mockObject) => array($mockObject, 'prepareLastWill')); $this->assertSame($expectedArray, $shutdownObjects); }