mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-31 04:59:21 +03:00
91 lines
1.9 KiB
PHP
91 lines
1.9 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of MailSo.
|
|
*
|
|
* (c) 2014 Usenko Timur
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace MailSo\Base;
|
|
|
|
/**
|
|
* @category MailSo
|
|
* @package Base
|
|
*/
|
|
abstract class Collection extends \ArrayObject implements \JsonSerializable
|
|
{
|
|
function __construct($input = array(), int $flags = 0, string $iterator_class = 'ArrayIterator')
|
|
{
|
|
parent::__construct(/*[], $flags, $iterator_class*/);
|
|
foreach ($input as $item) {
|
|
$this->append($item);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param mixed $mItem
|
|
*/
|
|
public function append($mItem, bool $bToTop = false) : void
|
|
{
|
|
if ($bToTop) {
|
|
$array = $this->getArrayCopy();
|
|
\array_unshift($array, $mItem);
|
|
$this->exchangeArray($array);
|
|
} else {
|
|
parent::append($mItem);
|
|
}
|
|
}
|
|
|
|
public function keys() : array
|
|
{
|
|
return \array_keys($this->getArrayCopy());
|
|
}
|
|
|
|
public function Add($mItem, bool $bToTop = false) : self
|
|
{
|
|
$this->append($mItem, $bToTop);
|
|
return $this;
|
|
}
|
|
|
|
public function Clear() : void
|
|
{
|
|
$this->exchangeArray([]);
|
|
}
|
|
/*
|
|
public function __call(string $name, array $arguments)
|
|
{
|
|
$callable = "array_{$name}";
|
|
if (!\is_callable($callable)) {
|
|
throw new BadMethodCallException(__CLASS__.'->'.$name);
|
|
}
|
|
return $callable($this->getArrayCopy(), ...$arguments);
|
|
}
|
|
*/
|
|
public function Slice(int $offset, ?int $length = null, bool $preserve_keys = false)
|
|
{
|
|
return new static(
|
|
\array_slice($this->getArrayCopy(), $offset, $length, $preserve_keys)
|
|
);
|
|
}
|
|
|
|
public function Crop(?int $length = null, int $offset = 0, bool $preserve_keys = false)
|
|
{
|
|
$this->exchangeArray(
|
|
\array_slice($this->getArrayCopy(), $offset, $length, $preserve_keys)
|
|
);
|
|
return $this;
|
|
}
|
|
|
|
#[\ReturnTypeWillChange]
|
|
public function jsonSerialize()
|
|
{
|
|
$aNames = \explode('\\', \get_class($this));
|
|
return array(
|
|
'@Object' => 'Collection/' . \end($aNames),
|
|
'@Collection' => $this->getArrayCopy()
|
|
);
|
|
}
|
|
}
|