<?php
class a implements \Iterator, \Countable, \ArrayAccess
{
private $a;
private $b;
private $c;
private $keys = [
'a', 'b', 'c'
];
private $pointer;
public function __construct($a = null, $b = null, $c = null)
{
$this->a = $a;
$this->b = $b;
$this->c = $c;
}
public function count()
{
$pointer = 0;
foreach ($this as $element) {
if ($element) {
$pointer++;
}
}
return $pointer;
}
public function current()
{
$key = $this->key();
return $this->{$key};
}
public function key()
{
return $this->keys[$this->pointer];
}
public function next()
{
$this->pointer++;
}
public function valid()
{
return $this->pointer < count($this->keys);
}
public function rewind()
{
$this->pointer = 0;
}
public function offsetExists($offset)
{
return isset($this->{$offset});
}
public function offsetGet($offset)
{
return $this->{$offset};
}
public function offsetSet($offset, $value)
{
throw new \BadMethodCallException('Object does not implement set');
}
public function offsetUnset($offset)
{
throw new \BadMethodCallException('Value object does not implement modification via unset');
}
}
$me = new a(1,2,3);
var_dump($me->count());
foreach ($me as $key => $el) {
if ($key === 'b') {
$me[$key] = 111;
}
}
var_dump($me);
Deprecated: Return type of a::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/eMc5N on line 37
Deprecated: Return type of a::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/eMc5N on line 48
Deprecated: Return type of a::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/eMc5N on line 43
Deprecated: Return type of a::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/eMc5N on line 53
Deprecated: Return type of a::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/eMc5N on line 58
Deprecated: Return type of a::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/eMc5N on line 24
Deprecated: Return type of a::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/eMc5N on line 64
Deprecated: Return type of a::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/eMc5N on line 69
Deprecated: Return type of a::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/eMc5N on line 74
Deprecated: Return type of a::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/eMc5N on line 79
int(3)
Fatal error: Uncaught BadMethodCallException: Object does not implement set in /in/eMc5N:76
Stack trace:
#0 /in/eMc5N(94): a->offsetSet('b', 111)
#1 {main}
thrown in /in/eMc5N on line 76
Process exited with code 255.
int(3)
Fatal error: Uncaught BadMethodCallException: Object does not implement set in /in/eMc5N:76
Stack trace:
#0 /in/eMc5N(94): a->offsetSet('b', 111)
#1 {main}
thrown in /in/eMc5N on line 76
Process exited with code 255.
int(3)
Fatal error: Uncaught exception 'BadMethodCallException' with message 'Object does not implement set' in /in/eMc5N:76
Stack trace:
#0 /in/eMc5N(94): a->offsetSet('b', 111)
#1 {main}
thrown in /in/eMc5N on line 76
Process exited with code 255.