/** * Creates instance of an Entity class and fills it * with provided data. New instance is created without * calling constructor. * * @param array $data * @param Text $entityClass * * @return \AGmakonts\DddBricks\Entity\EntityInterface * @throws InvalidEntityException */ private function _createInstance(array $data, Text $entityClass = NULL) { if (NULL === $entityClass) { $entityClass = new \ReflectionClass($this->getEntityType()->value()); } else { $entityClass = new \ReflectionClass($entityClass->value()); } if (FALSE === $entityClass->isSubclassOf(EntityInterface::class)) { throw new InvalidEntityException($this->getEntityType(), InvalidEntityException::NOT_A_ENTITY); } elseif (FALSE === $entityClass->isInstantiable()) { throw new InvalidEntityException($this->getEntityType(), InvalidEntityException::NOT_INSTANTIABLE); } /* @var $entity EntityInterface */ $entity = $entityClass->newInstanceWithoutConstructor(); $properties = $this->_getProperties($entityClass); $filteredData = $this->_validateAndFilterDataKeys($data, $properties); unset($entityClass); return $this->_fillEntity($entity, $properties, $filteredData); }