piecesphp / datastructures
Clases que simulan estructuras de datos
v4.0.0
2026-08-28 21:08 UTC
Requires
- php: >=8.5 <8.6
Requires (Dev)
- phpstan/phpstan: ^2.1
- phpstan/phpstan-deprecation-rules: ^2.0
- phpunit/phpunit: ^10.0
- rector/rector: ^2.3
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Arrays tipados para PHP. Una colección que solo acepta elementos de un tipo: si entra uno equivocado, lanza una excepción en el momento en que se añade, no cuando se usa.
Es parte del framework PiecesPHP, pero no depende de él.
Requisitos
- PHP
>=8.5 <8.6. - Sin extensiones ni dependencias de ejecución.
Instalación
composer require piecesphp/datastructures
Qué trae
Todas en el namespace PiecesPHP\Core\DataStructures:
| Clase | Qué es |
|---|---|
ArrayOf | La colección tipada. Extiende \ArrayObject, así que se recorre, se cuenta y se indexa como un array |
IntegerArray | ArrayOf de enteros |
StringArray | ArrayOf de cadenas |
Exceptions\NotAllowedTypeException | Se lanza al añadir un elemento de otro tipo |
Exceptions\MissingQualifiedNameException | Se lanza al crear una colección de objetos sin decir de qué clase |
Uso
Enteros y cadenas
use PiecesPHP\Core\DataStructures\IntegerArray;
use PiecesPHP\Core\DataStructures\StringArray;
$ids = new IntegerArray([1, 2]);
$ids->append(3);
$ids[] = 4;
count($ids); // 4
$etiquetas = new StringArray('php'); // un valor suelto se envuelve: ['php']
Objetos de una clase
use PiecesPHP\Core\DataStructures\ArrayOf;
$fechas = new ArrayOf([new DateTime()], ArrayOf::TYPE_OBJECT, DateTime::class);
$fechas[] = new DateTimeImmutable(); // NotAllowedTypeException: no es instancia de DateTime
El tipo equivocado
use PiecesPHP\Core\DataStructures\Exceptions\NotAllowedTypeException;
try {
$ids->append('5');
} catch (NotAllowedTypeException $e) {
// $e->getMessage() === 'not_allowed_type_exception'
}
Sustituir el contenido y convertir a JSON
$anterior = $etiquetas->exchangeArray(['a', 'b']); // valida los nuevos y devuelve los anteriores
echo $etiquetas; // ["a","b"]
Referencia
ArrayOf::__construct($input = [], string $type = ArrayOf::TYPE_MIXED, ?string $qualifiedName = null)
| Constante | Acepta | Ojo |
|---|---|---|
TYPE_MIXED | cualquier cosa | |
TYPE_INTEGER | is_integer() | '5' no es entero |
TYPE_DECIMAL | is_float() | un entero no vale: 2 se rechaza, 2.0 se acepta |
TYPE_STRING | is_string() | |
TYPE_OBJECT | instancias de $qualifiedName (incluidas sus subclases) | sin $qualifiedName, MissingQualifiedNameException |
TYPE_SELF | instancias de la propia clase de la colección |
- Un
$inputque no es array se envuelve en uno. - Un
$typeque no está en la tabla lanzaNotAllowedTypeException.
Métodos
| Método | Qué hace |
|---|---|
append($value): void | Valida y añade |
$coleccion[] = $v / $coleccion['k'] = $v | Valida el valor (no la clave) y lo guarda |
exchangeArray($input): array | Valida los nuevos elementos, sustituye el contenido y devuelve el anterior. Pásale un array |
getType() | La constante de tipo |
getQualifiedName() | La clase aceptada; null si el tipo no es TYPE_OBJECT |
__toString() | JSON del contenido. Con TYPE_OBJECT cada elemento va serialize()-ado. Si la codificación falla, cadena vacía |
IntegerArray y StringArray solo reciben $input.
Pruebas
composer install
php examples/readme.php # ejecuta los ejemplos de este README; sale con 1 si alguno no da lo que dice
vendor/bin/phpunit
26 pruebas en tests/Core/DataStructures/.
Cambios
Ver CHANGELOG.md.
Licencia
MIT. Ver LICENSE.