- filter_var: documentation ( source)
- json_encode: documentation ( source)
<?php
class ValueObject implements JsonSerializable {
protected $value;
public function jsonSerialize() {
return $this->value;
}
}
class Email extends ValueObject {
public function __construct(string $value) {
$email = filter_var($value, FILTER_VALIDATE_EMAIL);
if (false === $email) {
throw new Exception('Email is invalid.');
}
$this->value = $email;
}
}
class Age extends ValueObject {
public function __construct(int $value) {
if ($value > 150) {
throw new Exception('Age must be less than 150.');
}
$this->value = $value;
}
}
class User implements JsonSerializable {
private $email;
private $age;
public function __construct(Email $email) {
$this->email = $email;
}
public function setAge(Age $age) { $this->age = $age; }
public function jsonSerialize() {
return ['email' => $this->email, 'age' => $this->age];
}
}
$email = new Email('opexus@gmail.com');
$age = new Age(23);
$user = new User($email);
$user->setAge($age);
echo json_encode($user);