allowedReturnTypes, true)) { $this->returnType = $returnType; } else { $this->returnType = self::TYPE_ARRAYOBJECT; } if ($this->returnType === self::TYPE_ARRAYOBJECT) { $this->setArrayObjectPrototype($arrayObjectPrototype ?: new ArrayObject([], ArrayObject::ARRAY_AS_PROPS)); } } /** * Set the row object prototype * * @param ArrayObject $arrayObjectPrototype * @return $this Provides a fluent interface * @throws Exception\InvalidArgumentException */ public function setArrayObjectPrototype($arrayObjectPrototype) { if ( ! is_object($arrayObjectPrototype) || ( ! $arrayObjectPrototype instanceof ArrayObject && ! method_exists($arrayObjectPrototype, 'exchangeArray') ) ) { throw new Exception\InvalidArgumentException( 'Object must be of type ArrayObject, or at least implement exchangeArray' ); } $this->arrayObjectPrototype = $arrayObjectPrototype; return $this; } /** * Get the row object prototype * * @return ArrayObject */ public function getArrayObjectPrototype() { return $this->arrayObjectPrototype; } /** * Get the return type to use when returning objects from the set * * @return string */ public function getReturnType() { return $this->returnType; } /** * @return array|ArrayObject|null */ public function current() { $data = parent::current(); if ($this->returnType === self::TYPE_ARRAYOBJECT && is_array($data)) { /** @var ArrayObject $ao */ $ao = clone $this->arrayObjectPrototype; if ($ao instanceof ArrayObject || method_exists($ao, 'exchangeArray')) { $ao->exchangeArray($data); } return $ao; } return $data; } }