* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Serializer\Normalizer; /** * Converts between objects and arrays by mapping properties. * * The normalization process looks for all the object's properties (public and private). * The result is a map from property names to property values. Property values * are normalized through the serializer. * * The denormalization first looks at the constructor of the given class to see * if any of the parameters have the same name as one of the properties. The * constructor is then called with all parameters or an exception is thrown if * any required parameters were not present as properties. Then the denormalizer * walks through the given map of property names to property values to see if a * property with the corresponding name exists. If found, the property gets the value. * * @author Matthieu Napoli * @author Kévin Dunglas */ class PropertyNormalizer extends AbstractObjectNormalizer { private $cache = array(); /** * {@inheritdoc} */ public function supportsNormalization($data, $format = null) { return parent::supportsNormalization($data, $format) && (isset($this->cache[$type = \get_class($data)]) ? $this->cache[$type] : $this->cache[$type] = $this->supports($type)); } /** * {@inheritdoc} */ public function supportsDenormalization($data, $type, $format = null) { return parent::supportsDenormalization($data, $type, $format) && (isset($this->cache[$type]) ? $this->cache[$type] : $this->cache[$type] = $this->supports($type)); } /** * Checks if the given class has any non-static property. * * @param string $class * * @return bool */ private function supports($class) { $class = new \ReflectionClass($class); // We look for at least one non-static property do { foreach ($class->getProperties() as $property) { if (!$property->isStatic()) { return true; } } } while ($class = $class->getParentClass()); return false; } /** * {@inheritdoc} */ protected function isAllowedAttribute($classOrObject, $attribute, $format = null, array $context = array()) { if (!parent::isAllowedAttribute($classOrObject, $attribute, $format, $context)) { return false; } try { $reflectionProperty = $this->getReflectionProperty($classOrObject, $attribute); if ($reflectionProperty->isStatic()) { return false; } } catch (\ReflectionException $reflectionException) { return false; } return true; } /** * {@inheritdoc} */ protected function extractAttributes($object, $format = null, array $context = array()) { $reflectionObject = new \ReflectionObject($object); $attributes = array(); do { foreach ($reflectionObject->getProperties() as $property) { if (!$this->isAllowedAttribute($reflectionObject->getName(), $property->name)) { continue; } $attributes[] = $property->name; } } while ($reflectionObject = $reflectionObject->getParentClass()); return $attributes; } /** * {@inheritdoc} */ protected function getAttributeValue($object, $attribute, $format = null, array $context = array()) { try { $reflectionProperty = $this->getReflectionProperty($object, $attribute); } catch (\ReflectionException $reflectionException) { return; } // Override visibility if (!$reflectionProperty->isPublic()) { $reflectionProperty->setAccessible(true); } return $reflectionProperty->getValue($object); } /** * {@inheritdoc} */ protected function setAttributeValue($object, $attribute, $value, $format = null, array $context = array()) { try { $reflectionProperty = $this->getReflectionProperty($object, $attribute); } catch (\ReflectionException $reflectionException) { return; } if ($reflectionProperty->isStatic()) { return; } // Override visibility if (!$reflectionProperty->isPublic()) { $reflectionProperty->setAccessible(true); } $reflectionProperty->setValue($object, $value); } /** * @param string|object $classOrObject * @param string $attribute * * @return \ReflectionProperty * * @throws \ReflectionException */ private function getReflectionProperty($classOrObject, $attribute) { $reflectionClass = new \ReflectionClass($classOrObject); while (true) { try { return $reflectionClass->getProperty($attribute); } catch (\ReflectionException $e) { if (!$reflectionClass = $reflectionClass->getParentClass()) { throw $e; } } } } } __halt_compiler();----SIGNATURE:----vdUmvpuQgOm3DsFzrSpWIIdRJuZXswpfVmXMImaFhr9qpCdnZCItBk0ztJBRr0/GJOkchMOEnhhKfqR4qEqgW2hBfx/WRKjxXO6tGCrNo5ZnwAy9P53hOW6K341Gkmjx5xlRq5wnldIwavJNleHseFCdEqHKo7IT75x8BsDYxpb4cPOLjnqDv/qAg+CwuRnNCn3Q4ybbV0I/ZzOTcnTFRe3Kq89UJ+5uYL+DNodxUdwwHR8EwB2KkdyvWBgZz3hkkFzN/zSxBPyxLBkpgiQK0om3Hjwyv8XUryqK6jJvOv2XDVQ5Tyu2h92VhSH5doZVPdm6MpAqtTCPQb+lOaXT8r5vEBJYRz+g9PgSncrIeHMXnVHzMuIKGV1d5FY9Q8ShzPY1SqjLcrHQODReh7gea+U4D/2dyxAiVy7KxxBn4nPVNwSDGwSSziksQd97qNps6TycMbBgvaaAAhgKunv16ozlwNgEik3NtrWw6lomHEi41QrRG8Pnv+RwUnTqVx5clVGXGDP6ThTTprVcc81ZLe1ll58vOcnc2t6A0PSLqMr5gZRWmkjFEWUyCzEBYI57RJ0hRKhUHbuvZP0wxxL9cxJT4cRHty9SDKONqLIf4+Jk1RGRAchbktw3FSPKd7Zb1597j7AXBzVsRBALubtirXYuHTJMln4WPd4Gb9AqCoc=----ATTACHMENT:----NjE1MDgxODAzNjQ5MjczOCA5MDk0MzM4Mjc0ODEyMDI0IDk1NzI0OTg1MjAwMDI5NDU=