ObjectProperty.php in Zircon Profile 8.0
File
vendor/zendframework/zend-hydrator/src/ObjectProperty.php
View source
<?php
namespace Zend\Hydrator;
use ReflectionClass;
use ReflectionProperty;
class ObjectProperty extends AbstractHydrator {
private static $skippedPropertiesCache = [];
public function extract($object) {
if (!is_object($object)) {
throw new Exception\BadMethodCallException(sprintf('%s expects the provided $object to be a PHP object)', __METHOD__));
}
$data = get_object_vars($object);
$filter = $this
->getFilter();
foreach ($data as $name => $value) {
if (!$filter
->filter($name)) {
unset($data[$name]);
continue;
}
$extracted = $this
->extractName($name, $object);
if ($extracted !== $name) {
unset($data[$name]);
$name = $extracted;
}
$data[$name] = $this
->extractValue($name, $value, $object);
}
return $data;
}
public function hydrate(array $data, $object) {
if (!is_object($object)) {
throw new Exception\BadMethodCallException(sprintf('%s expects the provided $object to be a PHP object)', __METHOD__));
}
$properties =& self::$skippedPropertiesCache[get_class($object)];
if (!isset($properties)) {
$reflection = new ReflectionClass($object);
$properties = array_fill_keys(array_map(function (ReflectionProperty $property) {
return $property
->getName();
}, $reflection
->getProperties(ReflectionProperty::IS_PRIVATE + ReflectionProperty::IS_PROTECTED + ReflectionProperty::IS_STATIC)), true);
}
foreach ($data as $name => $value) {
$property = $this
->hydrateName($name, $data);
if (isset($properties[$property])) {
continue;
}
$object->{$property} = $this
->hydrateValue($property, $value, $data);
}
return $object;
}
}