Этот вопрос относится к проверке ввода.
В вашем контексте есть несколько подходов, которые вы можете использовать.Конечная цель состоит в том, чтобы проверить, есть ли входные данные в списке принятых значений, но главный вопрос заключается в том, где, когда и как это сделать.
Наиболее интуитивный подход заключается в том, чтобы поместить его прямо в методНапример,
if (!in_array($input, self::ACCEPTABLE_INPUT)) {
throw some exception
}
Альтернативным механизмом в том же духе было бы использование assert:
assert(in_array($input, self::ACCEPTABLE_INPUT));
Однако это предполагает достойное тестовое покрытие.
Один способ, которыйЯ обычно предпочитаю моделировать тип ошибки как объект значения, например.
final class ErrorType
{
private const ACCEPTED = ['warning', 'danger', 'success'];
private $type;
public function __construct(string $type)
{
if (!in_array($type, ErrorType::ACCEPTED) {
throw some exception
}
$this->type = $type;
}
public function __toString(): string
{
return $this->type;
}
}
Это немного больше кода, но позволяет вам следовать принципу единой ответственности.
ВашФункция будет выглядеть так:
public function output($string, ErrorType $errorType) : void
{
echo "<div class='alert alert-$errorType' role='alert'>$string</div>";
}