PHP를 위한 미니멀하고 형식화되고 파이프된 불변 컬렉션 세트를 제공하는 라이브러리입니다.
PHP > 7.2
composer require dcsg/php-immutable-collections
PHP에 Generics가 없기 때문에 PHP에서 컬렉션을 입력할 수 없습니다.
이 라이브러리는 두 가지 추상 불변 컬렉션을 제공합니다.
PHP에는 Java와 같은 Generic이 없기 때문에 기본 유형의 컬렉션을 가질 수 없습니다. 이 라이브러리에서 사용할 수 있는 컬렉션은 자신만의 형식화된 컬렉션을 생성하기 위한 기반이므로 확장하기만 하면 됩니다.
DDD는 코드가 유비쿼터스 언어라고 불리는 비즈니스 언어를 사용하도록 하는 것입니다. PHP의 컬렉션이 없으면 배열에 동작을 추가할 수 없기 때문에 Arrays
사용하여 이를 달성하기가 매우 어렵습니다. 따라서 일반적으로 해당 동작을 엔터티에 추가하지만 거기에 있어서는 안 됩니다. 또 다른 문제는 Arrays
의 가변성입니다. VOs
(값 개체)는 항상 불변이어야 하며 Arrays
에서는 불가능하며 해당 Array
의 elements
모두 동일한 유형임을 항상 보장해야 합니다.
Collections
과 Arrays
모두 요소 그룹을 나타냅니다.Collections
기본적으로 PHP에서 지원되지 않지만 Arrays
지원됩니다.Arrays
PHP의 데이터 구조이며 거의 모든 것에 사용됩니다.Arrays
새로운 동작을 추가하는 것을 허용하지 않지만 Collections
이를 허용합니다.Arrays
요소의 유형 을 정의하는 것을 허용하지 않지만 Collections
이를 허용합니다. PHP를 위한 다른 컬렉션이 있는데 그 중 몇 가지를 꼽자면 Doctrine 컬렉션과 Illuminate 컬렉션이 있습니다. 이러한 컬렉션은 다양한 문제를 해결하고 특정 사용 사례에 맞게 조정되며 API는 광범위하고 컬렉션이 변경 가능하다는 것이 더 중요합니다. 이러한 조합으로 인해 더 간단한 사용 사례에 해당 컬렉션을 사용하기가 어렵습니다. 이것이 바로 우리가 여기서 제공하는 컬렉션이 매우 작은 API를 가지며 Iterator API를 노출하지 않는 이유입니다. 이렇게 하면 이를 사용하고 필요에 맞게 동작을 확장할 수 있습니다.
isEmpty
, count
, toArray
, contains
, get
, map
, filter
, slice
, merge
, reverse
, reduce
, first
, last
, head
, tail
과 같은 Util 메소드. <?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
더 나은 이해를 위해 두 가지 간단한 예를 제공합니다. 하나는 송장 관련이고 다른 하나는 화물선 다리 관련입니다.
최근 변경된 사항에 대한 자세한 내용은 변경 로그를 참조하세요.
$ composer test
자세한 내용은 기여 및 행동 강령을 참조하세요.
보안 관련 문제를 발견한 경우 문제 추적기를 사용하는 대신 [email protected]로 이메일을 보내주세요.
MIT 라이센스(MIT). 자세한 내용은 라이센스 파일을 참조하십시오.