/** * Extrai as informações existentes em uma classe * @param $object * @return array */ public static function extract($object) { $array = []; foreach ((new \ReflectionClass($object))->getProperties() as $property) { $config = new PropertyConfiguration($property, $object); if ($config->ignore() || $config->shouldIgnoreIfNull()) { continue; } $name = $config->getAlias(); $data = $config->getValue(); $array[$name] = $data; } return $array; }
/** * Define o conteúdo de uma propriedade lendo as regras relacionadas * a mesma, e seguindo a estratégia adequada para cada situação. * * @param $object * @param $property * @param $array */ public static function setProperty(&$object, \ReflectionProperty &$property, $array) { $property->setAccessible(true); $configuration = new PropertyConfiguration($property, $object); // Se o campo for do tipo que deve ser ignorado, // não meche nele... if ($configuration->ignore()) { return; } $value = null; $alias = $configuration->getAlias(); if (array_key_exists($alias, $array)) { $value = $array[$alias]; } if (!empty($configuration->getType())) { $type = $configuration->getType(); try { $value = new $type($value, false); } catch (NoDataFoundException $e) { $value = new $type(); } } $property->setValue($object, $value); }