/** * Verify that all required fields are populated * * @throws \Genesis\Exceptions\ErrorParameter */ protected function verifyFieldRequirements() { if (isset($this->requiredFields)) { $this->requiredFields->setIteratorClass('RecursiveArrayIterator'); $iterator = new \RecursiveIteratorIterator($this->requiredFields->getIterator()); foreach ($iterator as $fieldName) { if (empty($this->{$fieldName})) { throw new \Genesis\Exceptions\ErrorParameter(sprintf('Empty (null) required parameter: %s', $fieldName)); } } } }
<?php // Custom ArrayIterator (inherits from ArrayIterator) class MyArrayIterator extends ArrayIterator { } // Array of available fruits $fruits = array("lemons" => 1, "oranges" => 4, "bananas" => 5, "apples" => 10); $fruitsArrayObject = new ArrayObject($fruits); // Set the iterator classname to the newly $fruitsArrayObject->setIteratorClass('MyArrayIterator'); print_r($fruitsArrayObject->getIterator());
<?php // Copyright 2004-present Facebook. All Rights Reserved. class MyIterator extends ArrayIterator { } $a = new ArrayObject(); $a->foo = "hello"; $a->setIteratorClass('MyIterator'); var_dump($a->foo); var_dump($a->getIteratorClass()); $ser = unserialize(serialize($a)); var_dump($ser->foo); var_dump($ser->getIteratorClass());
/** * @param string $className */ public function setIteratorClass($className) { $this->data->setIteratorClass($className); }
<?php $ar = array(1, 2, array(31, 32, array(331)), 4); foreach (new RecursiveIteratorIterator(new ArrayObject($ar, 0, "RecursiveArrayIterator")) as $v) { echo "{$v}\n"; } $it = new ArrayObject($ar); var_dump($it->getIteratorClass()); try { foreach (new RecursiveIteratorIterator(new ArrayObject($ar)) as $v) { echo "{$v}\n"; } } catch (InvalidArgumentException $e) { echo $e->getMessage() . "\n"; } echo "===MANUAL===\n"; $it->setIteratorClass("RecursiveArrayIterator"); var_dump($it->getIteratorClass()); foreach (new RecursiveIteratorIterator($it) as $v) { echo "{$v}\n"; } ?> ===DONE===
$args = func_get_args(); echo " In " . __METHOD__ . "(" . implode($args, ',') . ")\n"; return parent::current(); } function next() { $args = func_get_args(); echo " In " . __METHOD__ . "(" . implode($args, ',') . ")\n"; return parent::next(); } function key() { $args = func_get_args(); echo " In " . __METHOD__ . "(" . implode($args, ',') . ")\n"; return parent::key(); } } $ao = new ArrayObject(array('a' => 1, 'b' => 2, 'c' => 3), 0, "MyIterator"); echo "--> Access using MyIterator:\n"; var_dump($ao->getIteratorClass()); var_dump($ao->getIterator()); foreach ($ao as $key => $value) { echo " {$key}=>{$value}\n"; } echo "\n\n--> Access using ArrayIterator:\n"; var_dump($ao->setIteratorClass("ArrayIterator")); var_dump($ao->getIteratorClass()); var_dump($ao->getIterator()); foreach ($ao as $key => $value) { echo "{$key}=>{$value}\n"; }
/** * Implementation of ArrayObject::setIteratorClass(). * * Sets the classname of the array iterator that is used by ::getIterator(). * * No value is returned. * * @param string $iteratorClass */ public function setIteratorClass($iteratorClass) { $this->arrayObject->setIteratorClass($iteratorClass); }
<?php try { $ao = new ArrayObject(array('a' => 1, 'b' => 2, 'c' => 3)); $ao->setIteratorClass("nonExistentClass"); foreach ($ao as $key => $value) { echo " {$key}=>{$value}\n"; } } catch (Exception $e) { var_dump($e->getMessage()); } try { $ao = new ArrayObject(array('a' => 1, 'b' => 2, 'c' => 3)); $ao->setIteratorClass("stdClass"); foreach ($ao as $key => $value) { echo " {$key}=>{$value}\n"; } } catch (Exception $e) { var_dump($e->getMessage()); } try { $ao = new ArrayObject(array('a' => 1, 'b' => 2, 'c' => 3), 0, "nonExistentClass"); foreach ($ao as $key => $value) { echo " {$key}=>{$value}\n"; } } catch (TypeError $e) { var_dump($e->getMessage()); } try { $ao = new ArrayObject(array('a' => 1, 'b' => 2, 'c' => 3), 0, "stdClass"); foreach ($ao as $key => $value) {