- filter_var: documentation ( source)
- compact: documentation ( source)
- json_encode: documentation ( source)
<?php
class ValueObject implements JsonSerializable {
private $value;
public function __construct($value) {
$this->value = $value;
}
public function jsonSerialize() {
return $this->value;
}
}
class Age extends ValueObject {
public function __construct(int $value) {
if ($value > 150) {
throw new Exception('Age must be less than 150.');
}
parent::__construct($value);
}
}
function Email(string $email) {
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.');
}
parent::__construct($email);
}
}
return new Email($email);
}
function Age(int $age) {
return new Age($age);
}
// 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];
// }
// public function __destruct()
// {
// // persist
// }
// }
// class UpdateUserCommand {
// private $userId;
// private $email;
// private $age;
// private $location;
// public function __construct(GUID $userId, Email $email, Age $age = null, Point $location = null) {
// $this->userId = $userId;
// $this->email = $email;
// $this->age = $age;
// $this->location = $location;
// }
// public function getUserId() { return $this->userId; }
// public function getEmail() { return $this->email; }
// public function getAge() { return $this->age; }
// public function getLocation() { return $this->location; }
// }
// class UserService {
// private $users;
// public function __construct(Users $users) {
// $this->users = $users;
// }
// public function update(UpdateUserCommand $command) {
// $user = $this->users[$command->getUserId()];
// $user->setEmail($command->getEmail());
// $user->setAge($command->getAge());
// $user->setPoint($command->getPoint());
// }
// }
$email = Email('opexus@gmail.com');
$age = Age(23);
// $lattitude = new Lattitude(-20);
// $longitude = new Longitude(170);
// $point = new Point($lattitude, $longitude);
// $user = new User($email);
// $user->setAge($age);
echo json_encode(compact('email', 'age'));