Files
DesignPatternsPHP/More/Repository/Domain/PostId.php
Dominik Liebler 4678b5d86f PHP8
2021-04-12 14:04:45 +02:00

39 lines
905 B
PHP

<?php declare(strict_types=1);
namespace DesignPatterns\More\Repository\Domain;
use InvalidArgumentException;
/**
* This is a perfect example of a value object that is identifiable by it's value alone and
* is guaranteed to be valid each time an instance is created. Another important property of value objects
* is immutability.
*
* Notice also the use of a named constructor (fromInt) which adds a little context when creating an instance.
*/
class PostId
{
public static function fromInt(int $id): PostId
{
self::ensureIsValid($id);
return new self($id);
}
private function __construct(private int $id)
{
}
public function toInt(): int
{
return $this->id;
}
private static function ensureIsValid(int $id)
{
if ($id <= 0) {
throw new InvalidArgumentException('Invalid PostId given');
}
}
}