- 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;
}
public function equals(ValueObject $value) {
return $this->value === $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);
}
}
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);
}
}
function Emails(Email ...$emails) {
class Emails implements JsonSerializable{
private $values;
public function __construct($values) {
$this->values = $values;
}
public function jsonSerialize() {
return $this->values;
}
}
}
function Email(string $email) : Email {
return new Email($email);
}
function Age(int $age) : 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; return $this; }
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());
// }
// }
$emails = Emails(Email('opexus@gmail.com'), Email('irma@wiki.ru'));
$age = Age(23);
// $point = Point(Lattitude(-20), Longitude(170));
// $lattitude = new Lattitude(-20);
// $longitude = new Longitude(170);
// $point = new Point($lattitude, $longitude);
// $user = new User($email);
// $user->setAge($age);
echo json_encode(compact('emails', 'age'));