Skip to content

概要

PHP Value Object は、ドメイン駆動設計における値オブジェクトパターンを PHP で実装するためのライブラリです。

値オブジェクトとは

値オブジェクトは、ドメイン駆動設計 (DDD) における重要な概念の 1 つです。エンティティとは異なり、識別子を持たず、その値によって等価性が判断されます。

例えば、メールアドレス、金額、日付などは値オブジェクトとして表現するのに適しています。

このライブラリの特徴

不変性

一度作成された値オブジェクトは変更できません。これにより、予期しない副作用を防ぎ、コードの信頼性が向上します。

php
$date = LocalDate::of(2025, 5, 14);
$tomorrow = $date->addDays(1); // 新しいインスタンスが返される
// $date は変更されない

自己検証

値オブジェクトは常に有効な状態を保証します。不正な値は作成時に拒否されるため、ドメインルールが確実に守られます。

php
// メールアドレスの形式が正しくなければエラー
$result = EmailAddress::tryFrom("invalid-email");
if ($result->isErr()) {
    $error = $result->unwrapErr();
}

型安全性

厳格な型チェックにより、予期しない型の値が混入することを防ぎます。PHP 8.4 の readonly クラスを活用し、型の安全性を最大限に高めています。

値による等価性

同じ値を持つオブジェクトは等価とみなされます。参照ではなく値で比較します。

php
$email1 = EmailAddress::from("test@example.com");
$email2 = EmailAddress::from("test@example.com");
$email1->equals($email2); // true

提供される値オブジェクト

基本型

カテゴリクラス説明
BooleanBooleanValue真偽値
StringStringValue文字列
StringEmailAddressメールアドレス
StringUlidULID
NumberIntegerValue整数
NumberPositiveIntegerValue正の整数
NumberNegativeIntegerValue負の整数
NumberDecimalValue小数
NumberPositiveDecimalValue正の小数
NumberNegativeDecimalValue負の小数
DateTimeLocalDate日付
DateTimeLocalTime時刻
DateTimeLocalDateTime日時
DateTimeLocalDateRange日付範囲

コレクション

クラス説明
ArrayList順序付きリスト
Mapキーと値のマップ
Pairキーと値のペア
ValueObjectList値オブジェクトのリスト

Enum

クラス説明
EnumValuePHP Enum を値オブジェクトとして扱う

次のステップ

MIT ライセンスの下で公開されています。