Hoje a partir do PHP 8.1 temos as propriedades readonly, ou seja, que após serem incializadas não podem ser modificadas.
# O código pode ficar
class Email
{
public readonly string $email;
public function __construct(string $email)
{
if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
throw new \InvalidArgumentException('Invalid e-mail address');
}
$this->email = $email;
}
}
#Para acessar a propriedade basta usar (Na classe Student)
$this->email->email;
#Assim eu acredito que ficar ainda mais claro a nível de código