https://github.com/glamorous/value-object
PHP Interface to create value objects to use in your project. Abstract Enum class available that uses the same interface.
https://github.com/glamorous/value-object
enum php valueobject
Last synced: 2 months ago
JSON representation
PHP Interface to create value objects to use in your project. Abstract Enum class available that uses the same interface.
- Host: GitHub
- URL: https://github.com/glamorous/value-object
- Owner: glamorous
- License: mit
- Created: 2018-06-24T22:07:22.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2021-07-12T08:11:53.000Z (over 4 years ago)
- Last Synced: 2025-05-19T02:08:47.700Z (9 months ago)
- Topics: enum, php, valueobject
- Language: PHP
- Size: 59.6 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Value Object
[](https://packagist.org/packages/glamorous/value-object)
[](https://github.com/glamorous/value-object)
[]()
[](https://travis-ci.com/glamorous/value-object)
[](https://codecov.io/gh/glamorous/value-object)
[](https://scrutinizer-ci.com/g/glamorous/value-object/)
[](https://packagist.org/packages/glamorous/value-object)
[](https://github.com/glamorous/value-object/issues)
PHP Interface to create value objects to use in your project. Abstract Enum class available that uses the same interface.
## Why?
ValueObjects are the ideal way to use in your project. You can force yourself in your project to have data in the way you want.
## Documentation
### The interface
The interface has three methods you need to implement.
- **__toString()**: This magic method is needed to represent the ValueObject as a string. Is usefull for logging.
- **toNative()**: This method must return an array, integer, string... This is needed to test if two value objects are the same or not and for serializing.
- **equalsTo(ValueObject $object)**: The method requires another ValueObject instance. The `toNative()`-method can be used to check if two value objects are the same. In the Enum it uses the `equals` method from the parent.
### The Enum
The included Enum extends the Enum from [MyCLabs](https://github.com/myclabs/php-enum).
Additionally it implements the interface.
This way it's possible to use the functions `toNative()` and `equalsTo()` in your application.
More importantly an enumaration is also a value object, something that can't be changed when created.
When all those classes implements the same interface, its easier for the developer to use them through eachother.
## Installation
You can install the package via composer:
``` bash
$ composer require glamorous/value-object
```
## Usage
**Amount (Interface example)**
Most of the people will say: "this is an integer, why do we need a value object?". Then you should read some articles about value objects again.
```
use Glamorous\ValueObject;
final class Amount implements ValueObject
{
private $amount;
public __construct(int $amount)
{
if ($amount < 0) {
throw new \InvalidArgumentException('Amount must be above zero or zero');
}
$this->amount = $amount;
}
}
```
**Status (Enum example)**
```
use Glamorous\Enum;
final class Status extends Enum
{
const OPEN = 'open';
const CLOSED = 'closed';
}
```
## Changelog
Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.
## Testing
``` bash
$ composer test
```
## Contributing
Please see [CONTRIBUTING](CONTRIBUTING.md) for details. To see a list of the contributors: [all contributors](../../contributors).
## License
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.