예제 #1
0
 /**
  * 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;
 }
예제 #2
0
 /**
  * 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);
 }