You are here

class ArraySerializable in Zircon Profile 8

Same name in this branch
  1. 8 vendor/zendframework/zend-hydrator/src/ArraySerializable.php \Zend\Hydrator\ArraySerializable
  2. 8 vendor/zendframework/zend-stdlib/src/Hydrator/ArraySerializable.php \Zend\Stdlib\Hydrator\ArraySerializable
Same name and namespace in other branches
  1. 8.0 vendor/zendframework/zend-hydrator/src/ArraySerializable.php \Zend\Hydrator\ArraySerializable

Hierarchy

Expanded class hierarchy of ArraySerializable

1 file declares its use of ArraySerializable
ArraySerializable.php in vendor/zendframework/zend-stdlib/src/Hydrator/ArraySerializable.php

File

vendor/zendframework/zend-hydrator/src/ArraySerializable.php, line 12

Namespace

Zend\Hydrator
View source
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;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
AbstractHydrator::$filterComposite protected property Composite to filter the methods, that need to be hydrated
AbstractHydrator::$namingStrategy protected property An instance of NamingStrategy\NamingStrategyInterface
AbstractHydrator::$strategies protected property The list with strategies that this hydrator has.
AbstractHydrator::addFilter public function Add a new filter to take care of what needs to be hydrated. To exclude e.g. the method getServiceLocator: Overrides FilterEnabledInterface::addFilter 1
AbstractHydrator::addStrategy public function Adds the given strategy under the given name. Overrides StrategyEnabledInterface::addStrategy
AbstractHydrator::extractName public function Convert a name for extraction. If no naming strategy exists, the plain value is returned.
AbstractHydrator::extractValue public function Converts a value for extraction. If no strategy exists the plain value is returned.
AbstractHydrator::getFilter public function Get the filter instance
AbstractHydrator::getNamingStrategy public function Gets the naming strategy. Overrides NamingStrategyEnabledInterface::getNamingStrategy
AbstractHydrator::getStrategy public function Gets the strategy with the given name. Overrides StrategyEnabledInterface::getStrategy
AbstractHydrator::hasFilter public function Check whether a specific filter exists at key $name or not Overrides FilterEnabledInterface::hasFilter
AbstractHydrator::hasNamingStrategy public function Checks if a naming strategy exists. Overrides NamingStrategyEnabledInterface::hasNamingStrategy
AbstractHydrator::hasStrategy public function Checks if the strategy with the given name exists. Overrides StrategyEnabledInterface::hasStrategy
AbstractHydrator::hydrateName public function Converts a value for hydration. If no naming strategy exists, the plain value is returned.
AbstractHydrator::hydrateValue public function Converts a value for hydration. If no strategy exists the plain value is returned.
AbstractHydrator::removeFilter public function Remove a filter from the composition. To not extract "has" methods, you simply need to unregister it Overrides FilterEnabledInterface::removeFilter 1
AbstractHydrator::removeNamingStrategy public function Removes the naming strategy Overrides NamingStrategyEnabledInterface::removeNamingStrategy 1
AbstractHydrator::removeStrategy public function Removes the strategy with the given name. Overrides StrategyEnabledInterface::removeStrategy
AbstractHydrator::setNamingStrategy public function Adds the given naming strategy Overrides NamingStrategyEnabledInterface::setNamingStrategy 1
AbstractHydrator::__construct public function Initializes a new instance of this class. 1
ArraySerializable::extract public function Extract values from the provided object Overrides ExtractionInterface::extract
ArraySerializable::hydrate public function Hydrate an object Overrides HydrationInterface::hydrate