依存関係注入コンテナー、データベース レコードを格納するための RecordSet オブジェクト、http Cookie のバッグ、技術的にはループ可能で配列を使用して各項目にアクセスできる項目のコレクションなどを実装するために拡張できるコレクション パッケージ。 -access 構文またはオブジェクト プロパティ構文。
あなたはできる:
このパッケージは、オプションでコレクション項目の厳密な型指定を提供し、100% の単体テスト カバレッジを目指します。
コンポーザー経由: (PHP 7.4 以降または PHP 8.0 以降が必要)。
3.X ブランチに切り替えて、3.X バージョンのドキュメントを読んでください。
4.X ブランチに切り替えて、4.X バージョンのドキュメントを参照してください。
5.x ブランチに切り替えて、5.x バージョンのドキュメントを読んでください。
master ブランチに切り替えて、最新バージョンのドキュメントを読んでください。
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とまったく同じように動作させることもできます。
厳密な型指定を強制する場合は、次の Collection クラスがこのパッケージで提供されます。
特定のクラス ( PDOなど) のインスタンスであるオブジェクトのみを含むカスタム コレクションを実装するには、カスタム コレクション クラスが次の要件に従う必要があります。
カスタム コレクション クラスは、現在以下のメソッドを含むVersatileCollectionsStrictlyTypedCollectionInterfaceを実装する必要があります。
$item
が予期されたタイプの場合は true を返し、それ以外の場合は false を返す必要がありますカスタム コレクション クラスは、 VersatileCollectionsStrictlyTypedCollectionInterfaceImplementationTrait ( VersatileCollectionsStrictlyTypedCollectionInterfaceのメソッドの実装を含む) を使用する必要があります。 VersatileCollectionsStrictlyTypedCollectionInterfaceImplementationTraitを使用しないことを選択した場合は、 VersatileCollectionsStrictlyTypedCollectionInterfaceで指定されたすべてのメソッドを実装し、項目を追加または項目を変更するすべてのメソッドでcheckType(mixed $item)メソッドを呼び出す必要があります。 offsetSet($key, $val)などのコレクションで、 checkType(mixed $item)が false を返すたびに、 VersatileCollectionsExceptionsInvalidItemException例外が発生します。カスタム コレクション クラスで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として宣言すると、クラスのユーザーが拡張できなくなり、構築時や項目追加時に強制される型チェックを回避できます。
注:コレクション内の特定のクラスまたはそのサブクラスのインスタンスのみである項目のみを保存し、その目的のためにカスタム コレクション クラスを作成したくない場合は、単に SpecificObjectsCollection を使用します。
カテゴリ別のメソッド用語集
方法の説明と例
汎用コレクション
厳密に型指定されたコレクション
Laravel コレクションメソッドの等価性
ドキュメントに問題が見つかった場合は、問題またはプルリクエストを送信してください。