Введение
PHP Manual
PHP Manual»Структуры данных»SplFixedArray

Класс SplFixedArray

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

Класс SplFixedArray обеспечивает базовую функциональность, предоставляемую массивами. Главное различие между SplFixedArray и обычным массивом PHP в том, что размер SplFixedArray необходимо изменять вручную, а в качестве индексов могут выступать только целочисленные значения. Преимущество данных ограничений заключается в меньшем использовании памяти, чем стандартный массив (array).

class SplFixedArray implements IteratorAggregate, ArrayAccess, Countable, JsonSerializable {
/* Методы */
public function __construct(int $size = 0)
public function count(): int
public function current(): mixed
public static function fromArray(array $array, bool $preserveKeys = true): SplFixedArray
public function getIterator(): Iterator
public function getSize(): int
public function jsonSerialize(): array
public function key(): int
public function next(): void
public function offsetExists(int $index): bool
public function offsetGet(int $index): mixed
public function offsetSet(int $index, mixed $value): void
public function offsetUnset(int $index): void
public function rewind(): void
public function __serialize(): array
public function setSize(int $size): true
public function toArray(): array
public function __unserialize(array $data): void
public function valid(): bool
#[\Deprecated]
public function __wakeup(): void
}
Версия Описание
8.4.0 Обращения за пределами допустимого диапазона в SplFixedArray теперь выбрасывают исключения типа OutOfBoundsException вместо RuntimeException. Поскольку OutOfBoundsException — дочерний класс RuntimeException, при попытке перехватить эти исключения поведение не меняется.
8.2.0 Магические методы SplFixedArray::__serialize() и SplFixedArray::__unserialize() добавлены в SplFixedArray.
8.1.0 Обращение к объекту SplFixedArray по нецелочисленному ключу теперь вместо исключения RuntimeException выбрасывает ошибку TypeError.
8.1.0 Класс SplFixedArray теперь реализует интерфейс JsonSerializable.
8.0.0 Класс SplFixedArray теперь реализует интерфейс IteratorAggregate. Ранее был реализован интерфейс Iterator.

Пример #1 Пример использования SplFixedArray

<?php
// Инициализация массива фиксированной длиной
$array = new SplFixedArray(5);

$array[1] = 2;
$array[4] = "foo";

var_dump($array[0]); // NULL
var_dump($array[1]); // int(2)

var_dump($array["4"]); // string(3) "foo"

// Увеличение размера массива до 10
$array->setSize(10);

$array[9] = "asdf";

// Сокращаем размер массива до 2-х
$array->setSize(2);

// Следующие два блока вызывают исключение RuntimeException: Index invalid or out of range
try {
    var_dump($array[-1]);
} catch(RuntimeException $e) {
    echo "RuntimeException: ".$e->getMessage()."\n";
}

try {
    var_dump($array[5]);
} catch(RuntimeException $e) {
    echo "RuntimeException: ".$e->getMessage()."\n";
}

// Начиная с PHP 8.1.0 нецелочисленный ключ выбрасывает ошибку TypeError.
// До PHP 8.1.0 вместо неё выбрасывалось исключение RuntimeException.
try {
    var_dump($array["non-numeric"]);
} catch(TypeError $e) {
    echo "TypeError: ".$e->getMessage()."\n";
}
?>

Результат выполнения приведённого примера:

NULL
int(2)
string(3) "foo"
RuntimeException: Index invalid or out of range
RuntimeException: Index invalid or out of range
TypeError: Illegal offset type

Замечание:

До PHP 8.1.0 обращение к SplFixedArray по нецелочисленному ключу выбрасывало исключение RuntimeException, а не ошибку TypeError.

Содержание

To Top