mistralys / application-utils-collections
Interfaces, traits and classes for handling static item collections, similar to Enums and with useful getter methods.
Installs: 1 202
Dependents: 4
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- php: >=7.4
- mistralys/application-utils-core: >=2.2.3
Requires (Dev)
- phpstan/phpstan: >=1.10
- phpunit/phpunit: >=9.6
README
Interfaces, traits and classes for handling static item collections, similar to Enums and with useful getter methods.
In essence, it allows creating collections like this with a minimum of code:
$basil = Herbs::getInstance()->getByID(Herbs::BASIL); echo $basil->getID(); // basil echo $basil->getName(); // Basil
foreach(Herbs::getInstance()->getAll() as $herb) { echo $herb->getName(); }
This is part of the Application Utils ecology.
The Principle
The basic principle is to have a collection class for a data type, which knows all the possible values for that type, and a record class that represents a single value of that type.
The collections and records are distinguished by the return type of
their getID()
method.
Currently, only string and integer types are supported.
Implementation
There are two ways to implement collections:
- By extending the abstract base classes (e.g.
BaseStringPrimaryCollection
) - By implementing the interface and trait (e.g.
StringPrimaryCollectionTrait
)
The second way is useful when working with classes that already extend another class.
The records have no abstract base class, only an interface that
contains the getID()
method with the relevant return type.
Usage
There are example implementations of the string and integer collections in the unit test classes: