<?php
class ValueObject implements JsonSerializable {
private $value;
public function get() {
return $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;
}
}
$email = new Email('opexus@gmail.com');
$age = new Age(23);
echo json_encode(compact('email', 'age'));
Deprecated: Return type of ValueObject::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/5QPIu on line 7
Deprecated: Creation of dynamic property Email::$value is deprecated in /in/5QPIu on line 17
Deprecated: Creation of dynamic property Age::$value is deprecated in /in/5QPIu on line 25
{"email":null,"age":null}
Output for 8.1.0 - 8.1.28
Deprecated: Return type of ValueObject::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/5QPIu on line 7
{"email":null,"age":null}
Catchable fatal error: Argument 1 passed to Email::__construct() must be an instance of string, string given, called in /in/5QPIu on line 30 and defined in /in/5QPIu on line 12
Process exited with code 255.