PHP 用の最小限の、型指定およびパイプされた不変コレクションのセットを提供するライブラリ。
PHP > 7.2
composer require dcsg/php-immutable-collections
PHP にはジェネリックがないため、PHP で型付きコレクションを持つことができません。
このライブラリは、2 つの抽象的な不変コレクションを提供します。
PHP には Java のようなジェネリックがないため、ネイティブ型のコレクションを持つことはできません。このライブラリで利用可能なコレクションは、独自の型付きコレクションを作成するための基盤であり、拡張するだけで済みます。
DDD は、ユビキタス言語と呼ばれるビジネス言語をコードで話すようにすることです。 PHP でコレクションがなければ、配列に動作を追加できないため、 Arrays
を使用してこれを実現するのは非常に困難です。したがって、通常はその動作をエンティティに追加しますが、それは存在すべきではありません。もう 1 つの問題はArrays
の可変性ですVOs
(Value Object) は常に不変でなければなりませんが、 Arrays
ではそれは不可能であり、そのArray
のelements
すべて同じ型であることを常に保証する必要があります。
Collections
とArrays
どちらも要素のグループを表します。Collections
はネイティブにサポートされていませんが、 Arrays
サポートされています。Arrays
PHP のデータ構造であり、ほとんどすべてのものに使用されます。Arrays
新しい動作を追加できませんが、 Collections
ではそれが可能です。Arrays
要素の型を定義できませんが、 Collections
ではそれが可能です。 PHP 用のコレクションは他にもあり、その中には Doctrine Collection や Illuminate Collection などがあります。これらのコレクションはさまざまな問題を解決し、特定のユースケースに合わせて調整されており、その 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
理解を深めるために、2 つの簡単な例を示します。 1 つは請求書に関するもので、もう 1 つは貨物船の脚に関するものです。
最近の変更点の詳細については、CHANGELOG を参照してください。
$ composer test
詳細については、「貢献」と「行動規範」をご覧ください。
セキュリティ関連の問題を発見した場合は、問題トラッカーを使用する代わりに、[email protected] に電子メールを送信してください。
MIT ライセンス (MIT)。詳細については、ライセンス ファイルを参照してください。