Mbh/Collection/Traits/Sequenceable/Arrayed/ArrayAccess.php
<?php namespace Mbh\Collection\Traits\Sequenceable\Arrayed;
/**
* MBHFramework
*
* @link https://github.com/MBHFramework/mbh-framework
* @copyright Copyright (c) 2017 Ulises Jeremias Cornejo Fandos
* @license https://github.com/MBHFramework/mbh-framework/blob/master/LICENSE (MIT License)
*/
use Traversable;
use OutOfRangeException;
trait ArrayAccess
{
protected $sfa = null;
/**
* ArrayAccess
*/
public function offsetExists($offset): bool
{
return is_integer($offset)
&& $this->validIndex($offset)
&& $this->sfa->offsetExists($offset);
}
public function offsetGet($offset)
{
return $this->sfa->offsetGet($offset);
}
public function offsetSet($offset, $value)
{
if ($offset === null) {
$this->push($value);
} elseif (is_integer($offset)) {
$this->set($offset, $value);
}
}
public function offsetUnset($offset)
{
return is_integer($offset)
&& $this->remove($offset);
}
abstract protected function checkCapacity();
/**
* Adds zero or more values to the end of the sequence.
*
* @param mixed ...$values
*/
abstract public function push(...$values);
/**
* Removes and returns the value at a given index in the sequence.
*
* @param int $index this index to remove.
*
* @return mixed the removed value.
*
* @throws OutOfRangeException if the index is not in the range [0, size-1]
*/
abstract public function remove(int $index);
/**
* Replaces the value at a given index in the sequence with a new value.
*
* @param int $index
* @param mixed $value
*
* @throws OutOfRangeException if the index is not in the range [0, size-1]
*/
abstract public function set(int $index, $value);
abstract protected function validIndex(int $index);
}