returnType = (in_array($returnType, array(self::TYPE_ARRAY, self::TYPE_ARRAYOBJECT))) ? $returnType : self::TYPE_ARRAYOBJECT; if ($this->returnType === self::TYPE_ARRAYOBJECT) { $this->setArrayObjectPrototype(($arrayObjectPrototype) ?: new ArrayObject(array(), ArrayObject::ARRAY_AS_PROPS)); } } /** * Set the row object prototype * * @param ArrayObject $arrayObjectPrototype * @throws Exception\InvalidArgumentException * @return ResultSet */ 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 $ao ArrayObject */ $ao = clone $this->arrayObjectPrototype; if ($ao instanceof ArrayObject || method_exists($ao, 'exchangeArray')) { $ao->exchangeArray($data); } return $ao; } return $data; } }