La clase SplFixedArray

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

Introducción

la clase SplFixedArray proporciona la funcionalidad principal de un array. La principal diferencia entre SplFixedArray y un array normal de PHP es que la clase SplFixedArray es de longitud fija y sólo permite enteros dentro del rango de índices. La ventaja es que usa menos memoría que un array estándar.

Sinopsis de la Clase

class SplFixedArray implements IteratorAggregate, ArrayAccess, Countable, JsonSerializable {
/* Métodos */
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
}

Historial de cambios

Versión Descripción
8.4.0 Los accesos fuera de los límites en SplFixedArray ahora lanzan excepciones de tipo OutOfBoundsException en lugar de RuntimeException. Dado que OutOfBoundsException es una clase hija de RuntimeException, no se produce ningún cambio de comportamiento al intentar capturar esas excepciones.
8.2.0 Se han añadido los métodos mágicos SplFixedArray::__serialize() y SplFixedArray::__unserialize() a SplFixedArray.
8.1.0 SplFixedArray ahora implementa JsonSerializable.
8.0.0 SplFixedArray ahora implementa IteratorAggregate. Anteriormente, se implementaba Iterator en su lugar.

Ejemplos

Ejemplo #1 Ejemplo de uso SplFixedArray

<?php
// Inicializar el array con una longitud fija
$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"

// Aumentar el tamaño del array a 10
$array->setSize(10);

$array[9] = "asdf";

// Reducir el tamaño de un array a 2
$array->setSize(2);

// Las siguientes líneas lanzan una RuntimeException: Index invalid or out of range (Índice inválido o fuera de rango)
try {
var_dump($array["non-numeric"]);
} catch(
RuntimeException $re) {
echo
"RuntimeException: ".$re->getMessage()."\n";
}

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

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

El ejemplo anterior mostrará:

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

Tabla de contenidos