<?phpuse mako\dataclass\DataClass;
use mako\dataclass\attributes\Validator;
classUserextendsDataClass
{
publicstring$username;
publicstring$email;
#[Validator('username')]
protectedfunctionusernameMustNotContainSpace(string$username): string
{
if (str_contains($username, '') === true) {
thrownewValueError('username must not contain a space');
}
return$username;
}
}
// An error will now be thrown if the username property contains a space$user = newUser(
username: 'freost',
email: 'freost@example.org',
);
Nested data classes
<?phpuse mako\dataclass\DataClass;
use mako\dataclass\attributes\Validator;
classAvatarextendsDataClass
{
publicstring$url;
}
classUserextendsDataClass
{
publicstring$username;
publicstring$email;
publicAvatar$avatar;
}
// The avatar property will be instantiated as an Avatar instance$user = newUser(
username: 'freost',
email: 'freost@example.org',
avatar: ['url' => 'https://example.org/avatar.png'],
);
Arrays of nested data classes
<?phpuse mako\dataclass\DataClass;
use mako\dataclass\attributes\ArrayOf;
use mako\dataclass\attributes\Validator;
classAvatarextendsDataClass
{
publicstring$url;
}
classUserextendsDataClass
{
publicstring$username;
publicstring$email;
#[ArrayOf(Avatar::class)]
publicarray$avatars;
}
// The elements of the avatars property will be instantiated as Avatar instances$user = newUser(
username: 'freost',
email: 'freost@example.org',
avatars: [['url' => 'https://example.org/avatar.png']],
);