<?php
namespace Rixxi\Utils;
class Batch implements \ArrayAccess
{
/** @var int */
private $limit;
/** @var int */
private $counter = 0;
/** @var callable */
private $callback;
/** @var array */
private $values = array();
/**
* @param callable $callback
* @param int $limit
*/
public function __construct(callable $callback, $limit = 1000)
{
$this->callback = $callback;
$this->limit = $limit;
}
public function __destruct()
{
$this->flush();
}
public function add($value)
{
$this->values[] = $value;
if (++$this->counter === $this->limit) {
$this->flush();
}
}
public function flush()
{
if ($this->counter !== 0) {
$callback = $this->callback;
$callback($this->values);
$this->values = array();
$this->counter = 0;
}
}
public function offsetSet($index, $value)
{
if ($index !== NULL) {
throw new Exception();
}
$this->add($value);
}
public function offsetGet($index)
{
throw new NotSupportedException('You can only append to batch.');
}
public function offsetExists($index)
{
throw new NotSupportedException('You can only append to batch.');
}
public function offsetUnset($index)
{
throw new NotSupportedException('You can only append to batch.');
}
}
Deprecated: Return type of Rixxi\Utils\Batch::offsetExists($index) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/62g86 on line 75
Deprecated: Return type of Rixxi\Utils\Batch::offsetGet($index) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/62g86 on line 69
Deprecated: Return type of Rixxi\Utils\Batch::offsetSet($index, $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/62g86 on line 59
Deprecated: Return type of Rixxi\Utils\Batch::offsetUnset($index) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/62g86 on line 81