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 ライセンスの下で公開されています。