https://github.com/mistralys/application-utils-collections
Interfaces, traits and classes for handling static item collections like item statuses or criticality levels.
https://github.com/mistralys/application-utils-collections
Last synced: over 1 year ago
JSON representation
Interfaces, traits and classes for handling static item collections like item statuses or criticality levels.
- Host: GitHub
- URL: https://github.com/mistralys/application-utils-collections
- Owner: Mistralys
- License: mit
- Created: 2023-10-13T09:10:18.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-07-25T15:01:22.000Z (about 2 years ago)
- Last Synced: 2025-02-24T00:46:39.405Z (over 1 year ago)
- Language: PHP
- Size: 47.9 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: changelog.md
- License: LICENSE
Awesome Lists containing this project
README
# AppUtils - Collections
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:
```php
$basil = Herbs::getInstance()->getByID(Herbs::BASIL);
echo $basil->getID(); // basil
echo $basil->getName(); // Basil
```
```php
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:
1. By extending the abstract base classes (e.g. `BaseStringPrimaryCollection`)
2. 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:
- [Integer collection](tests/AppUtilsTestClasses/IntegerPrimaryCollectionImpl.php)
- [Integer record](tests/AppUtilsTestClasses/IntegerPrimaryRecordImpl.php)
- [String collection](tests/AppUtilsTestClasses/IntegerPrimaryCollectionImpl.php)
- [String record](tests/AppUtilsTestClasses/IntegerPrimaryRecordImpl.php)
- [String collection, with class folder loading](tests/AppUtilsTestClasses/StringPrimaryFolderCollectionImpl.php)
[Application Utils]: https://github.com/Mistralys/application-utils