This library provides the basic building blocks for value objects
composer require phpvalueobjects/phpvalueobjects
Simply instantiate an object, using a parameter value(s) appropriate for the type of object you're using
$name = new StringValue('Fred Flintstone');
Some objects, like Uuid
, can also be instantiated without a parameter, and will generate a new value internally for you
# Will generate an object with a new uuid v4 value for you
$uuid = new Uuid4();
# Will generate an object with the value `2877d189-f3b8-4386-8588-6841715ec27a`
$uuid = new Uuid4('2877d189-f3b8-4386-8588-6841715ec27a');
In cases where you want to be more finer-grained than the base objects provided, you may extend any object.
If you don't need anything besides to have your own type, simply leave the class definition empty:
final class FirstName extends StringValue
{
}
$firstName = new FirstName('Fred');
If you'd like to create your own Value Object that's not based on one provided here, simply implement the ValueObject
interface and provide the required method implementations
final class EmailAddress implements ValueObject
{
private $value;
public function __construct(string $value)
{
if (! filter_var($value, FILTER_VALIDATE_EMAIL)) {
throw new \InvalidArgumentException('...');
}
$this->value = $value;
}
public function __toString() : string
{
return $this->toNative();
}
public function isSameAs(ValueObject $object) : bool
{
return ValueObjectValidator::matchesSpecification(
new IsSameClass($this, $object),
new IsSameScalarValue($this, $object)
);
}
public function toNative() : string
{
return $this->value;
}
}
See each individual object for its own API, in addition to the standard API provided by the ValueObjectInterface