snappymail/snappymail/v/0.0.0/app/libraries/MailSo/Base/Collection.php
2020-10-21 22:44:32 +02:00

77 lines
1.6 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();
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 Add($mItem, bool $bToTop = false) : self
{
$this->append($mItem, $bToTop);
return $this;
}
public function Clear() : void
{
$this->exchangeArray([]);
}
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;
}
public function jsonSerialize()
{
$aNames = explode('\\', get_class($this));
return array(
'@Object' => 'Collection/' . end($aNames),
'@Count' => $this->Count(),
'@Collection' => $this->getArrayCopy()
);
}
}