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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
<?php
/*
* This file is part of the ICanBoogie package.
*
* (c) Olivier Laviale <olivier.laviale@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace ICanBoogie\HTTP;
/**
* Representation of a list of request files.
*/
class FileList implements \ArrayAccess, \IteratorAggregate, \Countable
{
/**
* Creates a {@link FileList} instance.
*
* @param array|FileList|null $files
*
* @return FileList
*/
static public function from($files)
{
if ($files instanceof self)
{
return clone $files;
}
if (!$files)
{
return new static([]);
}
foreach ($files as &$file)
{
$file = File::from($file);
}
return new static($files);
}
/**
* @var File[]
*/
protected $list;
public function __construct(array $files = [])
{
foreach ($files as $id => $file)
{
$this[$id] = $file;
}
}
/**
* Checks if a file exists.
*
* @param string $id
*
* @return bool
*/
public function offsetExists($id)
{
return isset($this->list[$id]);
}
/**
* Returns a file.
*
* @param string $id
*
* @return File|null A {@link File} instance, or `null` if it does not exists.
*/
public function offsetGet($id)
{
if (!$this->offsetExists($id))
{
return null;
}
return $this->list[$id];
}
/**
* Adds a file.
*
* @param string $id
* @param string|array|File $file
*/
public function offsetSet($id, $file)
{
if (!($file instanceof File || $file instanceof FileList))
{
$file = File::from($file);
}
$this->list[$id] = $file;
}
/**
* Removes a file.
*
* @param string $id
*/
public function offsetUnset($id)
{
unset($this->list[$id]);
}
/**
* @inheritdoc
*
* @return \ArrayIterator
*/
public function getIterator()
{
return new \ArrayIterator($this->list);
}
/**
* Returns the number of files in the collection.
*
* @return int
*/
public function count()
{
return count($this->list);
}
}