Skip to content

ReadonlyArrayList ​

Raxos\Collection\ReadonlyArrayList is the immutable counterpart of ArrayList. It exposes the same read and transformation operations, but any write through array access throws a CollectionImmutableException.

php
readonly class ReadonlyArrayList implements
    ArrayListInterface,
    DebuggableInterface,
    JsonSerializable,
    SerializableInterface

Construction ​

__construct ​

php
public function __construct(array $data = [])

Creates a readonly list from a plain PHP array.

of ​

php
public static function of(iterable $items): static

Creates a new instance from any iterable, converting Traversable sources and reindexing list arrays.

Read and transformation operations ​

ReadonlyArrayList uses the same ArrayListable trait as ArrayList, so map, filter, reduce, first, last, chunk, groupBy, sort, slice, convertTo and the rest are all available. Each transformation returns a new ReadonlyArrayList; none mutate the receiver.

Reading through array access, count(), iteration, toArray() and jsonSerialize() all work exactly as on ArrayList.

Immutability ​

offsetSet and offsetUnset throw a CollectionImmutableException because the class is readonly. The append, prepend, pop and shift mutators from ArrayList are not part of ReadonlyArrayList.

php
<?php
declare(strict_types=1);

use Raxos\Collection\ReadonlyArrayList;
use Raxos\Collection\Error\CollectionImmutableException;

$list = ReadonlyArrayList::of([1, 2, 3]);

$doubled = $list->map(static fn(int $number): int => $number * 2); // new list

try {
    $list[] = 4; // throws
} catch (CollectionImmutableException $exception) {
    // The collection is immutable.
}

See also the array lists concept page.