แพ็คเกจการรวบรวมที่สามารถขยายเพื่อใช้งานสิ่งต่าง ๆ เช่น Dependency Injection Container, RecordSet object สำหรับบันทึกฐานข้อมูลที่อยู่อาศัย, ถุงคุกกี้ http หรือในทางเทคนิคแล้วคอลเลกชันของไอเท็มใด ๆ ที่สามารถวนซ้ำได้และแต่ละไอเท็มสามารถเข้าถึงได้โดยใช้อาร์เรย์ - ไวยากรณ์การเข้าถึงหรือไวยากรณ์คุณสมบัติของวัตถุ
คุณสามารถ:
แพคเกจนี้มีตัวเลือกการพิมพ์รายการคอลเลกชันที่เข้มงวดและมุ่งมั่นที่จะครอบคลุมการทดสอบหน่วย 100 %
ผ่านผู้แต่ง: (ต้องใช้ PHP 7.4+ หรือ PHP 8.0+)
สลับไปที่สาขา 3.X เพื่ออ่านเอกสารประกอบสำหรับเวอร์ชัน 3.X
สลับไปที่สาขา 4.X เพื่ออ่านเอกสารประกอบสำหรับเวอร์ชัน 4.X
สลับไปที่สาขา 5.x เพื่ออ่านเอกสารประกอบสำหรับเวอร์ชัน 5.x
สลับไปที่สาขาหลักเพื่ออ่านเอกสารประกอบสำหรับเวอร์ชันล่าสุด
composer require rotexsoft/versatile-collections
หากคุณต้องการจัดเก็บรายการประเภทเดียวกันหรือต่างกันในคอลเลกชัน คุณสามารถใช้เพียงใช้คลาส GenericCollection ดังนี้:
<?php
use VersatileCollections GenericCollection ;
// items to be stored in your collection
$ item1 = [ ' yabadoo ' ]; // an array
$ item2 = function (){ echo ' Hello World! ' ; }; // a callable
$ item3 = 777.888 ; // a float
$ item4 = 777 ; // an int
$ item5 = new stdClass (); // an object
$ item6 = new ArrayObject ([]); // another object
$ item7 = tmpfile (); // a resource
$ item8 = true ; // a boolean
$ item9 = " true " ; // a string
// Technique 1: pass the items to the constructor of the collection class
$ collection = new VersatileCollections GenericCollection (
$ item1 , $ item2 , $ item3 , $ item4 , $ item5 , $ item6 , $ item7 , $ item8 , $ item9
);
// Technique 2: pass the items in an array using argument unpacking
// to the constructor of the collection class
$ collection = new GenericCollection (
...[ $ item1 , $ item2 , $ item3 , $ item4 , $ item5 , $ item6 , $ item7 , $ item8 , $ item9 ]
);
// Technique 3: pass the items in an iterable (such as an array) to the static makeNew helper method
// available in all collection classes
$ collection = GenericCollection:: makeNew (
[ $ item1 , $ item2 , $ item3 , $ item4 , $ item5 , $ item6 , $ item7 , $ item8 , $ item9 ]
);
// Technique 4: create an empty collection object and subsequently add each
// item to the collection via array assignment syntax or object
// property assignment syntax or using the appendItem($item),
// prependItem($item, $key=null), push($item) or put($key, $value)
// methods
$ collection = new GenericCollection (); // empty collection
// OR
$ collection = GenericCollection:: makeNew (); // empty collection
$ collection [] = $ item1 ; // array assignment syntax without key
// the item is automatically assigned
// the next available integer key. In
// this case 0
$ collection [] = $ item2 ; // array assignment syntax without key
// the next available integer key in this
// case is 1
$ collection [ ' some_key ' ] = $ item3 ; // array assignment syntax with specified key `some_key`
$ collection -> some_key = $ item4 ; // object property assignment syntax with specified property
// `some_key`. This will update $collection['some_key']
// changing its value from $item3 to $item4
$ collection -> appendItem ( $ item3 ) // same effect as:
-> appendItem ( $ item5 ); // $collection[] = $item3;
// $collection[] = $item5;
// Adds an item to the end of the collection
// You can chain the method calls
$ collection -> prependItem ( $ item6 , ' new_key ' ); // adds an item with the optional
// specified key to the front of
// collection.
// You can chain the method calls
$ collection -> push ( $ item7 ); // same effect as:
// $collection[] = $item7;
// Adds an item to the end of the collection
// You can chain the method calls
$ collection -> put ( ' eight_item ' , $ item8 ) // same effect as:
-> put ( ' ninth_item ' , $ item9 ); // $collection['eight_item'] = $item8;
// $collection['ninth_item'] = $item9;
// Adds an item with the specified key to
// the collection. If the specified key
// already exists in the collection the
// item previously associated with the
// key is overwritten with the new item.
// You can chain the method calls
คุณยังสามารถทำให้คลาสใดๆ ในแอปพลิเคชันของคุณทำงานเหมือนกับ VersatileCollectionsGenericCollection ทุกประการโดยการใช้ VersatileCollectionsCollectionInterface และใช้ VersatileCollectionsCollectionInterfaceImplementationTrait ในคลาสดังกล่าว
หากคุณต้องการบังคับใช้การพิมพ์แบบเข้มงวด คลาส Collection ต่อไปนี้มีให้ในแพ็คเกจนี้:
หากต้องการใช้คอลเลกชันแบบกำหนดเองที่มีเฉพาะออบเจ็กต์ที่เป็นอินสแตนซ์ของคลาสเฉพาะ (เช่น PDO ) คลาสคอลเลกชันแบบกำหนดเองของคุณจะต้องเป็นไปตามข้อกำหนดต่อไปนี้:
คลาสคอลเลกชันที่กำหนดเองของคุณต้องใช้ VersatileCollectionsStrictlyTypedCollectionInterface ซึ่งปัจจุบันมีวิธีการด้านล่าง:
$item
เป็นประเภทที่คาดหวังหรือเป็นเท็จมิฉะนั้นคลาสคอลเลกชันที่กำหนดเองของคุณควรใช้ VersatileCollectionsStrictlyTypedCollectionInterfaceImplementationTrait (ซึ่งมีการนำเมธอดไปใช้ใน VersatileCollectionsStrictlyTypedCollectionInterface ) หากคุณเลือกที่จะไม่ใช้ VersatileCollectionsStrictlyTypedCollectionInterfaceImplementationTrait คุณจะต้องใช้วิธีการทั้งหมดที่ระบุไว้ใน VersatileCollectionsStrictlyTypedCollectionInterface และตรวจสอบให้แน่ใจว่าคุณเรียกใช้เมธอด checkType(mixed $item) ในทุกวิธีที่คุณเพิ่มรายการหรือแก้ไขรายการ ในคอลเลกชันเช่น offsetSet($key, $val) และโยน ข้อยกเว้น VersatileCollectionsExceptionsInvalidItemException เมื่อใดก็ตามที่ checkType(mixed $item) ส่งกลับค่า false หากคุณใช้ VersatileCollectionsStrictlyTypedCollectionInterfaceImplementationTrait ในคลาสคอลเลกชันที่กำหนดเองของคุณ แต่เพิ่มวิธีการใหม่ที่เพิ่มรายการหรือแก้ไขรายการในคอลเลกชันด้วย คุณสามารถใช้วิธีตัวช่วย isRightTypeOrThrowInvalidTypeException($item, $calling_functions_name) ที่ให้ไว้ใน VersatileCollectionsStrictlyTypedCollectionInterfaceImplementationTrait เพื่อตรวจสอบความถูกต้องของรายการ (มันจะ โยนข้อยกเว้นให้คุณโดยอัตโนมัติหากรายการที่คุณกำลังตรวจสอบอยู่ผิดประเภท ดู VersatileCollectionsStrictlyTypedCollectionInterfaceImplementationTrait::offsetSet($key, $val) สำหรับตัวอย่างวิธีการใช้เมธอดตัวช่วยนี้
คุณสามารถเลือกแทนที่ StrictlyTypedCollectionInterfaceImplementationTrait::__construct(mixed ...$arr_objs) ด้วย Constructor ที่มีลายเซ็นเดียวกัน แต่มีประเภทเฉพาะ ตัวอย่างเช่น __construct(PDO ...$pdo_objs) ทำให้แน่ใจว่าเฉพาะอินสแตนซ์ของ PDO เท่านั้นที่สามารถฉีดเข้าไปใน Constructor ผ่านการแตกไฟล์อาร์กิวเมนต์
ตัวอย่างโค้ดด้านล่างแสดงวิธีการใช้คลาสคอลเลกชันแบบกำหนดเองที่เรียกว่า PdoCollection ซึ่งจัดเก็บเฉพาะรายการที่เป็นอินสแตนซ์ของ PDO เท่านั้น:
<?php
use VersatileCollections StrictlyTypedCollectionInterface ;
class PdoCollection implements StrictlyTypedCollectionInterface { //1. Implement interface
use VersatileCollections StrictlyTypedCollectionInterfaceImplementationTrait; //2. Use trait
public function __construct ( PDO ... $ pdo_objs ) { //3. Optionally override the constructor with a type
// specific one
$ this -> versatile_collections_items = $ pdo_objs ;
}
/**
*
* @return bool true if $item is of the expected type, else false
*
*/
public function checkType ( mixed $ item ): bool { //4. implement interface methods not implemented in trait above
return ( $ item instanceof PDO );
}
/**
*
* @return string|array a string or array of strings of type name(s)
* for items acceptable in instances of this
* collection class
*
*/
public function getTypes (): VersatileCollections StringsCollection { //4. implement interface methods not implemented in trait above
return new VersatileCollections StringsCollection ( PDO ::class);
}
}
คุณสามารถประกาศคลาสคอลเลกชันที่พิมพ์แบบกำหนดเองของคุณให้เป็น ที่สิ้นสุดได้ เพื่อให้ผู้ใช้คลาสของคุณไม่สามารถขยายคลาสเหล่านั้นได้ และด้วยเหตุนี้จึงหลีกเลี่ยงการตรวจสอบประเภทที่บังคับใช้ในเวลาสร้างและเวลาเพิ่มไอเท็ม
หมายเหตุ: หากคุณต้องการจัดเก็บรายการที่เป็นเพียงอินสแตนซ์ของคลาสเฉพาะหรือคลาสย่อยในคอลเลกชันและไม่ต้องการสร้างคลาสคอลเลกชันแบบกำหนดเองเพื่อจุดประสงค์นั้น เพียงใช้ specificObjectsCollection
อภิธานศัพท์วิธีการตามหมวดหมู่
คำอธิบายวิธีการพร้อมตัวอย่าง
คอลเลกชันทั่วไป
คอลเลกชันที่พิมพ์อย่างเคร่งครัด
ความเท่าเทียมกันของวิธีการรวบรวม Laravel
กรุณาส่งปัญหาหรือคำขอดึงหากคุณพบปัญหาใด ๆ กับเอกสาร