Perpustakaan yang menyediakan kumpulan Koleksi Abadi yang minimalis, diketik, dan disalurkan untuk PHP.
PHP > 7.2
composer require dcsg/php-immutable-collections
Kurangnya Generik di PHP tidak memungkinkan untuk mengetikkan koleksi di PHP.
Perpustakaan ini menyediakan dua Koleksi abstrak yang Tidak Dapat Diubah:
Karena PHP tidak memiliki Generik seperti yang dimiliki Java, tidak mungkin memiliki koleksi yang diketik secara asli. Koleksi yang tersedia di Perpustakaan ini adalah landasan bagi Anda untuk membuat Koleksi Terketik Anda sendiri, Anda hanya perlu memperluasnya.
DDD adalah tentang membuat kode Anda berbicara dalam bahasa bisnis, yang disebut Bahasa Ubiquitous. Tanpa Koleksi di PHP, hal ini sangat sulit dicapai dengan menggunakan Arrays
karena Anda tidak dapat menambahkan perilaku ke dalamnya. Jadi yang biasanya terjadi Anda menambahkan perilaku itu ke entitas Anda tetapi perilaku itu tidak seharusnya ada. Masalah lainnya adalah mutabilitas Arrays
, VOs
(Value Objects) HARUS selalu tidak dapat diubah dan itu tidak mungkin dilakukan dengan Arrays
dan Anda harus selalu menjamin bahwa elements
Array
itu semuanya bertipe sama.
Collections
dan Arrays
keduanya mewakili Kelompok Elemen.Collections
tidak didukung secara asli oleh PHP sedangkan Arrays
didukung.Arrays
adalah struktur data PHP dan digunakan untuk hampir semua hal.Arrays
tidak mengizinkan Anda menambahkan perilaku baru sementara Collections
mengizinkannya.Arrays
tidak mengizinkan Anda menentukan tipe elemennya sementara Collections
mengizinkannya. Ada Koleksi lain untuk PHP di luar sana, beberapa di antaranya adalah Koleksi Doktrin dan Koleksi Iluminasi. Koleksi tersebut memecahkan masalah yang berbeda, disesuaikan dengan kasus penggunaan spesifiknya, dan API mereka sangat luas dan yang lebih penting adalah Koleksi tersebut Dapat Diubah. Kombinasi ini mempersulit penggunaan Koleksi tersebut untuk kasus penggunaan yang lebih sederhana. Itu sebabnya Koleksi yang kami sediakan di sini, memiliki API yang sangat kecil dan bahkan tidak mengekspos API Iterator. Dengan cara ini Anda memiliki kemungkinan untuk menggunakannya dan memperluas perilakunya yang disesuaikan dengan kebutuhan Anda.
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
Kami memberikan dua contoh sederhana untuk pemahaman yang lebih baik. Satu terkait invoice dan satu lagi terkait Kaki Kapal Kargo.
Silakan lihat CHANGELOG untuk informasi lebih lanjut tentang apa yang berubah baru-baru ini.
$ composer test
Silakan lihat KONTRIBUSI dan KODE ETIK untuk rinciannya.
Jika Anda menemukan masalah apa pun terkait keamanan, silakan kirim email ke [email protected] alih-alih menggunakan pelacak masalah.
Lisensi MIT (MIT). Silakan lihat File Lisensi untuk informasi lebih lanjut.