Perpustakaan yang menyediakan kumpulan Koleksi Abadi yang minimalis, diketik, dan disalurkan untuk PHP.
PHP > 7.2
composer require dcsg/php-immutable-collectionsKurangnya 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.