/** * @param array $transformed * @param string $type * @return object * @throws \Exception */ protected function revertObject($transformed, $type) { $class = new \ReflectionClass($type); $instance = $class->newInstanceWithoutConstructor(); if (!is_array($transformed)) { throw new \Exception("Error while reverting [{$type}]. Input is not an array: " . ValuePrinter::serialize($transformed)); } $reader = new PropertyReader($this->types, $class->getName()); $properties = []; foreach ($reader->readState() as $property) { $properties[] = $property->name(); if (array_key_exists($property->name(), $transformed)) { $value = new TypedValue($transformed[$property->name()], $property->type()); $transformer = $this->transformers->toRevert($value); $property->set($instance, $transformer->revert($value)); } } foreach ($transformed as $key => $value) { if (!in_array($key, $properties)) { $transformer = $this->transformers->toRevert($value); $instance->{$key} = $transformer->revert($value); } } return $instance; }
private function whenIReadTheStatePropertiesOf_WithTheFilter($class, $filter) { $reader = new PropertyReader(new TypeFactory(), $class); $this->properties = $reader->readState($filter); }