mirror of
https://github.com/DesignPatternsPHP/DesignPatternsPHP.git
synced 2025-06-12 08:56:34 +02:00
41 lines
906 B
PHP
41 lines
906 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');
|
|
}
|
|
}
|
|
}
|