Uma biblioteca que fornece um conjunto de coleções imutáveis minimalistas, digitadas e canalizadas para PHP.
PHP > 7.2
composer require dcsg/php-immutable-collections
A falta de Genéricos em PHP não permite ter coleções digitadas em PHP.
Esta biblioteca fornece duas coleções abstratas imutáveis:
Como o PHP não possui genéricos como o Java, não é possível ter coleções digitadas nativas. As Coleções disponíveis nesta Biblioteca são a base para você criar suas próprias Coleções Digitadas, bastando apenas estendê-las.
DDD tem tudo a ver com ter seu código falando a linguagem de negócios, a chamada Linguagem Ubíqua. Sem coleções em PHP, isso é muito difícil de conseguir usando Arrays
porque você não pode adicionar comportamento a eles. Então, o que geralmente acontece é que você adiciona esse comportamento à sua entidade, mas ele não deveria estar lá. Outro problema é a mutabilidade dos Arrays
, VOs
(Value Objects) DEVEM ser sempre imutáveis e isso é impossível com Arrays
e você deve sempre garantir que os elements
desse Array
sejam todos do mesmo tipo.
Collections
e Arrays
representam um grupo de elementos.Collections
não são suportadas nativamente pelo PHP, enquanto Arrays
são.Arrays
é A estrutura de dados do PHP e é usado para quase tudo.Arrays
não permitem adicionar novos comportamentos enquanto Collections
permitem.Arrays
não permitem definir um tipo para seus elementos, enquanto Collections
permitem. Existem outras coleções para PHP por aí, citando algumas como Doctrine Collections e Illuminate Collections. Essas coleções resolvem problemas diferentes, são adaptadas ao seu caso de uso específico e suas APIs são extensas e, mais importante, essas coleções são mutáveis. Essas combinações dificultam o uso dessas coleções em casos de uso mais simples. É por isso que as Collections que fornecemos aqui possuem uma API muito pequena e nem expõem a API do Iterator. Desta forma você tem a possibilidade de utilizá-los e ampliar seu comportamento sob medida para suas necessidades.
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
Fornecemos dois exemplos simples para melhor compreensão. Uma relativa a faturas e outra relativa a Pernas de Navio de Carga.
Consulte CHANGELOG para obter mais informações sobre o que mudou recentemente.
$ composer test
Consulte CONTRIBUIÇÃO e CÓDIGO DE CONDUTA para obter detalhes.
Se você descobrir algum problema relacionado à segurança, envie um e-mail para [email protected] em vez de usar o rastreador de problemas.
A licença MIT (MIT). Consulte Arquivo de licença para obter mais informações.