مكتبة توفر مجموعة من المجموعات غير القابلة للتغيير المكتوبة والمنقولة عبر الأنابيب لـ PHP.
بي إتش بي > 7.2
composer require dcsg/php-immutable-collections
عدم وجود الأدوية العامة في PHP لا يسمح بكتابة مجموعات في PHP.
توفر هذه المكتبة مجموعتين مجردتين غير قابلتين للتغيير:
نظرًا لأن PHP لا تحتوي على مواد عامة مثل Java، فمن غير الممكن أن يكون لديك مجموعات مكتوبة أصلية. المجموعات المتوفرة في هذه المكتبة هي الأساس الذي يمكنك من خلاله إنشاء مجموعاتك المكتوبة، ما عليك سوى توسيعها.
يدور DDD حول جعل التعليمات البرمجية الخاصة بك تتحدث لغة الأعمال، والتي تسمى Ubiquitous Language. بدون المجموعات في PHP، يصعب تحقيق ذلك باستخدام Arrays
لأنه لا يمكنك إضافة سلوك إليها. إذن ما يحدث عادةً هو إضافة هذا السلوك إلى كيانك ولكن لا ينبغي أن يكون موجودًا. هناك مشكلة أخرى وهي قابلية تغيير Arrays
، ويجب أن تكون VOs
(كائنات القيمة) غير قابلة للتغيير دائمًا وهذا مستحيل مع Arrays
ويجب عليك دائمًا التأكد من أن elements
تلك Array
كلها من نفس النوع.
Collections
Arrays
مجموعة من العناصر.Collections
غير مدعومة أصلاً بواسطة PHP بينما Arrays
مدعومة.Arrays
هي بنية بيانات PHP وتستخدم في كل شيء تقريبًا.Arrays
بإضافة سلوك جديد بينما تسمح Collections
بذلك.Arrays
بتحديد نوع لعناصرها بينما تسمح Collections
بذلك. هناك مجموعات أخرى لـ PHP، على سبيل المثال لا الحصر لدينا مجموعات Doctrine ومجموعات Illuminate. تحل هذه المجموعات مشكلات مختلفة، وهي مصممة خصيصًا لحالة الاستخدام المحددة الخاصة بها، وواجهات برمجة التطبيقات الخاصة بها واسعة النطاق، والأهم من ذلك أن تلك المجموعات قابلة للتغيير. تجعل هذه المجموعات من الصعب استخدام هذه المجموعات في حالات الاستخدام الأكثر بساطة. ولهذا السبب تحتوي المجموعات التي نقدمها هنا على واجهة برمجة تطبيقات صغيرة جدًا ولا تكشف حتى عن واجهة برمجة تطبيقات Iterator. بهذه الطريقة لديك إمكانية استخدامها وتوسيع سلوكها المصمم خصيصًا لاحتياجاتك.
isEmpty
, count
, contains
على get
map
, filter
, slice
, merge
, reverse
toArray
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
نحن نقدم مثالين بسيطين لفهم أفضل. أحدهما يتعلق بالفواتير والآخر يتعلق بأرجل سفينة شحن.
الرجاء مراجعة سجل التغيير للحصول على مزيد من المعلومات حول ما تغير مؤخرًا.
$ composer test
يرجى الاطلاع على المساهمة وقواعد السلوك للحصول على التفاصيل.
إذا اكتشفت أي مشكلات متعلقة بالأمان، فيرجى إرسال بريد إلكتروني إلى [email protected] بدلاً من استخدام أداة تعقب المشكلات.
رخصة معهد ماساتشوستس للتكنولوجيا (MIT). يرجى الاطلاع على ملف الترخيص لمزيد من المعلومات.