OOP Class Constructor Validation
Die im Constructor übergebenen Argumente sollten erst validiert werden, wenn sie benötigt werden.
Nehmen wir an du hast ein Object namens Email, dem du einen Empfänger im Constructor übergibst. Das Object hat die Method send, womit die die Email versendet wird. Ob die Email jemals versendet werden soll, entscheidet der Benutzer. Warum soll dann im Constructor bereits eine Validierung statt finden, welche bei einer invaliden Email Adresse eine Exception wirft, wenn der Benutzer gar nicht vorhat eine Email zu versenden? Der Benutzer ruft z.B. eine Liste mit seinen Artikeln auf und bekommt eine Fehlermeldung, das seine Email Adresse falsch ist. Er wird sich zu recht wundern, was die Artikelliste mit dem Email Versand zu tun haben soll.
// Falsch
class Email
{
private string $from;
public function __construct(string $from)
{
if (!filter_var($from, FILTER_VALIDATE_EMAIL)) {
throw new \InvalidArgumentException(
'Email address ' . $from . ' is invalid.'
);
}
$this->from = $from;
}
public function send()
{
// Send email to receiver
}
}
// Richtig
class Email
{
private string $from;
public function __construct(string $from)
{
$this->from = $from;
}
public function send()
{
if (!filter_var($from, FILTER_VALIDATE_EMAIL)) {
throw new \InvalidArgumentException(
'Email address ' . $this->from . ' is invalid.'
);
}
// Send email to receiver
}
}