<?php
class DomainData implements ArrayAccess, Iterator
{
private $position = 0;
public $domainId;
public $color;
public function __construct
($data = array()) {
$this->position = 0;
foreach ($data as $key => $value) {
$this[$key] = $value;
}
}
public function offsetExists($offset)
{
return isset($this->$offset); }
public function offsetSet($offset, $value)
{
$this->$offset = $value;
}
public function offsetGet($offset)
{
return $this->$offset;
}
public function offsetUnset($offset)
{
$this->$offset = null;
}
/*****************************************************************/
/* Iterator Implementation */
/*****************************************************************/
{
$this->position = 0;
}
{
return $this[$this->position];
}
{
return $this->position;
}
{
++$this->position;
}
public function valid()
{
return isset($this[$this->position]); }
}
$domainData = new DomainData([
"domainId" => 1,
"color" => "red"
]);
foreach($domainData as $k => $v){
}
PD9waHAKCgpjbGFzcyBEb21haW5EYXRhIGltcGxlbWVudHMgQXJyYXlBY2Nlc3MsIEl0ZXJhdG9yCnsKCXByaXZhdGUgJHBvc2l0aW9uID0gMDsKCXB1YmxpYyAkZG9tYWluSWQ7CglwdWJsaWMgJGNvbG9yOwoKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZGF0YSA9IGFycmF5KCkpCgl7CgkJJHRoaXMtPnBvc2l0aW9uID0gMDsKCQlmb3JlYWNoICgkZGF0YSBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCQkkdGhpc1ska2V5XSA9ICR2YWx1ZTsKCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIG9mZnNldEV4aXN0cygkb2Zmc2V0KQoJewoJCXJldHVybiBpc3NldCgkdGhpcy0+JG9mZnNldCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpCgl7CgkJJHRoaXMtPiRvZmZzZXQgPSAkdmFsdWU7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgkb2Zmc2V0KQoJewoJCXJldHVybiAkdGhpcy0+JG9mZnNldDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG9mZnNldCkKCXsKCQkkdGhpcy0+JG9mZnNldCA9IG51bGw7Cgl9CgoJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoJLyogICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBJbXBsZW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAqLwoJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCXB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKQoJewoJCSR0aGlzLT5wb3NpdGlvbiA9IDA7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKQoJewoJCXJldHVybiAkdGhpc1skdGhpcy0+cG9zaXRpb25dOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBrZXkoKQoJewoJCXJldHVybiAkdGhpcy0+cG9zaXRpb247Cgl9CgoJcHVibGljIGZ1bmN0aW9uIG5leHQoKQoJewoJCSsrJHRoaXMtPnBvc2l0aW9uOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpCgl7CgkJcmV0dXJuIGlzc2V0KCR0aGlzWyR0aGlzLT5wb3NpdGlvbl0pOwoJfQp9CgoKJGRvbWFpbkRhdGEgPSBuZXcgRG9tYWluRGF0YShbCgkiZG9tYWluSWQiID0+IDEsCgkiY29sb3IiID0+ICJyZWQiCl0pOwoKdmFyX2R1bXAoJGRvbWFpbkRhdGEpOwoKZm9yZWFjaCgkZG9tYWluRGF0YSBhcyAkayA9PiAkdil7Cgl2YXJfZHVtcCgiZG9tYWluRGF0YVska10gPSAkdiIpOwp9