1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
<?php
namespace ICanBoogie\Session;
use ICanBoogie\OffsetNotWritable;
use ICanBoogie\Session;
use ICanBoogie\SessionSegment;
class SegmentCollection implements \ArrayAccess, \IteratorAggregate
{
private $session;
private $segments = [];
public function __construct(Session $session)
{
$this->session = $session;
}
public function getIterator()
{
return new \ArrayIterator($this->segments);
}
public function offsetExists($segment_name)
{
return isset($this->session[$segment_name]);
}
public function offsetGet($segment_name)
{
$segment = &$this->segments[$segment_name];
return $segment ?: $segment = new Segment($segment_name, $this->session);
}
public function offsetSet($segment_name, $value)
{
throw new OffsetNotWritable("Segment offsets are not writable (`$segment_name`)`");
}
public function offsetUnset($segment_name)
{
unset($this->segments[$segment_name]);
unset($this->session[$segment_name]);
}
}