<?php
class Email implements JsonSerializable
{
private $value;
public function __construct(string $value)
{
$email = filter_var($value, FILTER_VALIDATE_EMAIL);
if (false === $email) {
throw new Exception('Email is invalid.');
}
$this->value = $email;
}
public function jsonSerialize()
{
return $this->value;
}
}
class Age implements JsonSerializable
{
private $value;
public function __construct(int $value)
{
if ($value > 150) {
throw new Exception('Age must be less than 150.');
}
$this->value = $value;
}
public function jsonSerialize()
{
return $this->value;
}
}
$email = new Email('opexus@gmail.com');
$age = new Age(23);
echo json_encode(compact('email', 'age'));
Deprecated: Return type of Email::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/4GMe4 on line 14
Deprecated: Return type of Age::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/4GMe4 on line 29
{"email":"opexus@gmail.com","age":23}
Catchable fatal error: Argument 1 passed to Email::__construct() must be an instance of string, string given, called in /in/4GMe4 on line 36 and defined in /in/4GMe4 on line 6
Process exited with code 255.