Files
DesignPatternsPHP/More/Repository/Domain/PostId.php
2019-08-17 21:58:04 +02:00

44 lines
934 B
PHP

<?php
declare(strict_types=1);
namespace DesignPatterns\More\Repository\Domain;
/**
* 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
{
/**
* @var int
*/
private $id;
public static function fromInt(int $id)
{
self::ensureIsValid($id);
return new self($id);
}
private function __construct(int $id)
{
$this->id = $id;
}
public function toInt(): int
{
return $this->id;
}
private static function ensureIsValid(int $id)
{
if ($id <= 0) {
throw new \InvalidArgumentException('Invalid PostId given');
}
}
}