Una biblioteca que proporciona un conjunto de colecciones inmutables minimalistas, escritas y canalizadas para PHP.
PHP > 7.2
composer require dcsg/php-immutable-collectionsLa falta de Genéricos en PHP no permite tener colecciones escritas en PHP.
Esta biblioteca proporciona dos colecciones inmutables abstractas:
Dado que PHP no tiene genéricos como Java, no es posible tener colecciones de tipo nativo. Las colecciones disponibles en esta biblioteca son la base para que usted pueda crear sus propias colecciones mecanografiadas, sólo necesita ampliarlas.
DDD se trata de que su código hable el lenguaje empresarial, el llamado lenguaje ubicuo. Sin colecciones en PHP, esto es muy difícil de lograr usando Arrays porque no se les puede agregar comportamiento. Entonces, lo que suele suceder es que agregas ese comportamiento a tu entidad, pero no debería estar allí. Otro problema es la mutabilidad de Arrays , VOs (Objetos de Valor) DEBEN ser siempre inmutables y eso es imposible con Arrays y siempre debes garantizar que los elements de ese Array sean todos del mismo tipo.
Collections como Arrays representan un grupo de elementos.Collections no son compatibles de forma nativa con PHP, mientras que Arrays sí lo son.Arrays son LA estructura de datos de PHP y se utilizan para casi todo.Arrays no le permiten agregar nuevos comportamientos mientras que Collections lo permiten.Arrays no le permiten definir un tipo para sus elementos, mientras que Collections sí lo permiten. Existen otras colecciones para PHP, entre las que se encuentran las colecciones Doctrine y Illuminate. Esas colecciones resuelven diferentes problemas, se adaptan a su caso de uso específico y sus API son extensas y, lo que es más importante, esas colecciones son mutables. Estas combinaciones dificultan el uso de esas colecciones para casos de uso más simples. Es por eso que las colecciones que proporcionamos aquí tienen una API muy pequeña y ni siquiera exponen la API Iterator. De esta manera tienes la posibilidad de utilizarlos y ampliar su comportamiento adaptado a tus necesidades.
isEmpty , count , toArray , contains , get , map , filter , slice , merge , reverse , reduce , first , last , head , tail . <?php declare (strict_types= 1 );
use DCSG ImmutableCollections ImmutableCollection ;
final class MyStringCollection extends ImmutableCollection {
protected function validateItems ( array $ elements ): void
{
foreach ( $ elements as $ element ) {
if (! is_string ( $ element )) {
throw new InvalidArgumentException ( ' Element is not a String. ' );
}
}
}
}
$ collection = MyStringCollection:: create ([ ' foo ' , ' bar ' ]);
echo $ collection -> count (); // 2
$ slicedCollection = $ collection -> slice ( 0 , 1 ); // MyStringCollection { $elements=['foo']} <?php declare (strict_types= 1 );
use DCSG ImmutableCollections SetImmutableCollection ;
final class MyStringSetCollection extends SetImmutableCollection {
protected function validateItems ( array $ elements ): void
{
foreach ( $ elements as $ element ) {
if (! is_string ( $ element )) {
throw new InvalidArgumentException ( ' Element is not a String. ' );
}
}
}
}
$ collection = MyStringSetCollection:: create ([ ' foo ' , ' bar ' ]);
echo $ collection -> count (); // 2
$ slicedCollection = $ collection -> tail (); // MyStringSetCollection { $elements=['bar']}
$ collection = MyStringSetCollection:: create ([ ' foo ' , ' bar ' , ' foo ' ]); // Throws InvalidArgumentException Proporcionamos dos ejemplos simples para una mejor comprensión. Uno relacionado con facturas y otro sobre Tramos de un Buque de Carga.
Consulte CHANGELOG para obtener más información sobre los cambios recientes.
$ composer test Consulte CONTRIBUCIÓN y CÓDIGO DE CONDUCTA para obtener más detalles.
Si descubre algún problema relacionado con la seguridad, envíe un correo electrónico a [email protected] en lugar de utilizar el rastreador de problemas.
La Licencia MIT (MIT). Consulte el archivo de licencia para obtener más información.