ArraySerializable.php in Zircon Profile 8.0
Same filename in this branch
Same filename and directory in other branches
Namespace
Zend\HydratorFile
vendor/zendframework/zend-hydrator/src/ArraySerializable.phpView source
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Zend\Hydrator;
class ArraySerializable extends AbstractHydrator {
/**
* Extract values from the provided object
*
* Extracts values via the object's getArrayCopy() method.
*
* @param object $object
* @return array
* @throws Exception\BadMethodCallException for an $object not implementing getArrayCopy()
*/
public function extract($object) {
if (!is_callable([
$object,
'getArrayCopy',
])) {
throw new Exception\BadMethodCallException(sprintf('%s expects the provided object to implement getArrayCopy()', __METHOD__));
}
$data = $object
->getArrayCopy();
$filter = $this
->getFilter();
foreach ($data as $name => $value) {
if (!$filter
->filter($name)) {
unset($data[$name]);
continue;
}
$extractedName = $this
->extractName($name, $object);
// replace the original key with extracted, if differ
if ($extractedName !== $name) {
unset($data[$name]);
$name = $extractedName;
}
$data[$name] = $this
->extractValue($name, $value, $object);
}
return $data;
}
/**
* Hydrate an object
*
* Hydrates an object by passing $data to either its exchangeArray() or
* populate() method.
*
* @param array $data
* @param object $object
* @return object
* @throws Exception\BadMethodCallException for an $object not implementing exchangeArray() or populate()
*/
public function hydrate(array $data, $object) {
$replacement = [];
foreach ($data as $key => $value) {
$name = $this
->hydrateName($key, $data);
$replacement[$name] = $this
->hydrateValue($name, $value, $data);
}
if (is_callable([
$object,
'exchangeArray',
])) {
$object
->exchangeArray($replacement);
}
elseif (is_callable([
$object,
'populate',
])) {
$object
->populate($replacement);
}
else {
throw new Exception\BadMethodCallException(sprintf('%s expects the provided object to implement exchangeArray() or populate()', __METHOD__));
}
return $object;
}
}
Classes
Name | Description |
---|---|
ArraySerializable |