종속성 주입 컨테이너, 데이터베이스 레코드를 보관하기 위한 RecordSet 개체, 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
또한 VersatileCollectionsCollectionInterface를 구현하고 해당 클래스에서 VersatileCollectionsCollectionInterfaceImplementationTrait를 사용하여 응용 프로그램의 모든 클래스가 VersatileCollectionsGenericCollection 과 똑같이 동작하도록 만들 수도 있습니다.
엄격한 유형 지정을 적용하려는 경우 이 패키지에 다음 컬렉션 클래스가 제공됩니다.
특정 클래스(예: PDO )의 인스턴스인 개체만 포함하는 사용자 지정 컬렉션을 구현하려면 사용자 지정 컬렉션 클래스가 다음 요구 사항을 준수해야 합니다.
사용자 정의 컬렉션 클래스는 현재 아래 메서드를 포함하는 VersatileCollectionsStrictlyTypedCollectionInterface를 구현해야 합니다.
$item
예상 유형이면 true를 반환해야 하고, 그렇지 않으면 false를 반환해야 합니다.사용자 정의 컬렉션 클래스는 VersatileCollectionsStrictlyTypedCollectionInterfaceImplementationTrait ( VersatileCollectionsStrictlyTypedCollectionInterface 의 메서드 구현 포함)를 사용해야 합니다. VersatileCollectionsStrictlyTypedCollectionInterfaceImplementationTrait를 사용하지 않기로 선택한 경우 VersatileCollectionsStrictlyTypedCollectionInterface 에 지정된 모든 메서드를 구현해야 하며 항목을 추가하거나 수정하는 모든 메서드에서 checkType(mixed $item) 메서드를 호출해야 합니다. offsetSet($key, $val) 과 같은 컬렉션에서 VersatileCollectionsExceptionsInvalidItemException checkType(mixed $item)이 false를 반환할 때마다 예외가 발생합니다. 사용자 지정 컬렉션 클래스에서 VersatileCollectionsStrictlyTypedCollectionInterfaceImplementationTrait를 사용하지만 컬렉션의 항목을 추가하거나 수정하는 새 메서드를 추가하는 경우 VersatileCollectionsStrictlyTypedCollectionInterfaceImplementationTrait 에 제공된 도우미 메서드 isRightTypeOrThrowInvalidTypeException($item, $calling_functions_name) 을 사용하여 항목을 확인할 수 있습니다. (그럴 것이다 유효성을 검사하는 항목의 유형이 잘못된 경우 자동으로 예외가 발생합니다. 이 도우미 메서드를 사용해야 하는 방법에 대한 예는 VersatileCollectionsStrictlyTypedCollectionInterfaceImplementationTrait::offsetSet($key, $val)를 참조하세요.
선택적으로 StrictlyTypedCollectionInterfaceImplementationTrait::__construct(mixed ...$arr_objs) 를 동일한 시그니처를 사용하지만 특정 유형의 생성자로 재정의할 수 있습니다. 예를 들어 __construct(PDO ...$pdo_objs)는 인수 풀기를 통해 PDO 의 인스턴스만 생성자에 주입될 수 있도록 보장합니다.
아래 코드 예제에서는 PDO 인스턴스인 항목만 저장하는 PdoCollection 이라는 사용자 지정 컬렉션 클래스를 구현하는 방법을 보여줍니다.
<?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);
}
}
사용자 정의 유형 컬렉션 클래스를 final 로 선언하면 클래스 사용자가 해당 클래스를 확장할 수 없어 생성 시 및 항목 추가 시 강제로 적용되는 유형 검사를 피할 수 있습니다.
참고: 특정 클래스 또는 해당 하위 클래스의 인스턴스인 항목만 컬렉션에 저장하고 해당 목적을 위한 사용자 지정 컬렉션 클래스를 생성할 필요가 없는 경우에는 간단히 SpecifiedObjectsCollection을 사용하십시오.
범주별 방법 용어집
예제를 포함한 방법 설명
일반 컬렉션
엄격한 형식의 컬렉션
Laravel 수집 방법의 동등성
문서에 문제가 있는 경우 문제를 제출하거나 끌어오기 요청을 제출하세요.