private function createInstance(Parameter $parameter, $properties) { $injector = new Injector(new Factory()); $instance = $injector->injectConstructor($this->getClass($parameter), $properties, function () { return false; }); foreach ($this->getProperties($parameter) as $property) { $property->set($instance, $properties[$property->name()]); } return $instance; }
/** * @param Parameter $parameter * @param null $serialized * @return object */ public function inflate(Parameter $parameter, $serialized) { $properties = []; foreach ($this->getProperties($parameter) as $property) { $propertyParameter = new Parameter($parameter->getName() . '-' . $property->name(), $property->type()); $field = $this->getField($propertyParameter); $properties[$property->name()] = $field->inflate($propertyParameter, $this->reader->read($propertyParameter)); } $injector = new Injector(new Factory()); $instance = $injector->injectConstructor($this->getClass($parameter), $properties, function () { return false; }); foreach ($this->getProperties($parameter) as $property) { $value = $properties[$property->name()]; if (!is_null($value) && $property->canSet()) { $property->set($instance, $value); } } return $instance; }
/** * @param Parameter $parameter * @param \watoki\collections\Map $serialized * @return object */ public function inflate(Parameter $parameter, $serialized) { $reader = new PropertyReader($this->types, $this->getClass($parameter)); $properties = []; foreach ($reader->readInterface() as $property) { if ($serialized->has($property->name())) { $param = $this->makePropertyParameter($parameter, $property); $properties[$property->name()] = $this->getField($param)->inflate($param, $serialized[$property->name()]); } } $injector = new Injector(new Factory()); $instance = $injector->injectConstructor($this->getClass($parameter), $properties, function () { return false; }); foreach ($reader->readInterface() as $property) { if ($property->canSet()) { $property->set($instance, $properties[$property->name()]); } } return $instance; }
protected function createInstance(array $parameters) { $injector = new Injector(new Factory()); $instance = $injector->injectConstructor($this->class->name, $parameters, function () { return false; }); foreach ($this->reader->readInterface() as $property) { if ($property->canSet() && array_key_exists($property->name(), $parameters)) { $property->set($instance, $parameters[$property->name()]); } } return $instance; }