src/Support/Collection.php
<?php
declare(strict_types=1);
namespace Shrimp\Support;
use Countable;
use Iterator;
/**
* Class Collection
* @package Shrimp\Support
*/
class Collection implements Iterator, Countable
{
/**
* @var int
*/
protected $position = 0;
/**
* @var array
*/
protected $sets = [];
/**
* @param $item
*/
public function add($item)
{
$this->sets[] = $item;
}
/**
* Return the current element
* @link https://php.net/manual/en/iterator.current.php
* @return mixed Can return any type.
* @since 5.0.0
*/
public function current()
{
// TODO: Implement current() method.
if ($this->valid()) {
return $this->sets[$this->position];
}
return null;
}
/**
* Move forward to next element
* @link https://php.net/manual/en/iterator.next.php
* @return void Any returned value is ignored.
* @since 5.0.0
*/
public function next()
{
// TODO: Implement next() method.
++$this->position;
}
/**
* Return the key of the current element
* @link https://php.net/manual/en/iterator.key.php
* @return mixed scalar on success, or null on failure.
* @since 5.0.0
*/
public function key()
{
// TODO: Implement key() method.
return $this->position;
}
/**
* Checks if current position is valid
* @link https://php.net/manual/en/iterator.valid.php
* @return boolean The return value will be casted to boolean and then evaluated.
* Returns true on success or false on failure.
* @since 5.0.0
*/
public function valid()
{
// TODO: Implement valid() method.
return isset($this->sets[$this->position]);
}
/**
* Rewind the Iterator to the first element
* @link https://php.net/manual/en/iterator.rewind.php
* @return void Any returned value is ignored.
* @since 5.0.0
*/
public function rewind()
{
// TODO: Implement rewind() method.
$this->position = 0;
}
/**
* Count elements of an object
* @link https://php.net/manual/en/countable.count.php
* @return int The custom count as an integer.
* </p>
* <p>
* The return value is cast to an integer.
* @since 5.1.0
*/
public function count()
{
// TODO: Implement count() method.
return count($this->sets);
}
}