<?php
/**
* Behaves like a PHP array (unstructured)
*/
class Bag implements IteratorAggregate, ArrayAccess {
private $__data;
// Implementation for ArrayAccess
public function offsetSet($offset, $value)
{
if (is_null($offset)) {
$this->__data[] = value;
} else {
$this->__data[$offset] = $value;
}
}
public function offsetExists($offset)
{
return isset($this->__data[$offset]);
}
public function offsetUnset($offset)
{
unset($this->__data[$offset]);
}
public function offsetGet($offset)
{
return isset($this->__data[$offset]) ? $this->__data[$offset] : null;
}
// Implementation for IteratorAggregate
public function getIterator()
{
return new ArrayIterator($this->__data);
}
public function __construct(array $data) {
$this->__data = $data;
}
public function some(Closure $fn) {
return new Bag(array_reduce($this->__data, function ($carry, $x) {
return $fn($x) || $carry;
}, false));
}
public function every(Closure $fn) {
return new Bag(array_reduce($this->__data, function ($carry, $x) {
return $fn($x) && $carry;
}, true));
}
public function reduce(Closure $fn) {
return new Bag(array_reduce($this->__data, $fn));
}
public function map(Closure $fn) {
return new Bag(array_map($fn, $this->__data));
}
public function filter(Closure $fn) {
return new Bag(array_filter($this->__data, $fn));
}
}
Deprecated: Return type of Bag::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/QcfvL on line 37
Deprecated: Return type of Bag::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/QcfvL on line 20
Deprecated: Return type of Bag::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/QcfvL on line 30
Deprecated: Return type of Bag::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/QcfvL on line 11
Deprecated: Return type of Bag::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/QcfvL on line 25