Самый простой способ: вернуть NULL, если проверка прошла успешно, и сообщение об ошибке, если она не удалась. Предотвращает необходимость создания классов ошибок или исключений. Также лучший по производительности.
например.
function numeric($input) {
if (!is_numeric($input)) return 'Must be numeric.';
return NULL;
}
function usernameavailable($input) {
//query database....
if ($result) return 'Username already taken, please choose another one.';
return NULL;
}
Вы также можете использовать функции с параметрами:
function length($input, $min, $max) {
if (strlen($input) < $min) return "Must be longer than $min characters.";
if (strlen($input) > $max) return "Must be shorter than $max characters.";
return NULL;
}
Проверка каждого элемента во всей форме очень проста. Просто зациклите все элементы, вызовите все функции проверки для этого элемента и соберите строки ошибок, если таковые имеются. Если строк ошибок нет, то все введенные пользователем данные действительны.
Я бы настоятельно не одобрял предложения, сделанные одним из других ответов. Неверный ввод пользователя не является исключением и не требует исключения или ошибки. Это просто ожидаемый вариант использования, который должен быть решен самым простым способом.
С помощью этого метода вы можете легко создать класс Form и просто создать экземпляры элементов с аргументами, являющимися функциями проверки. Вы также можете расширить это, чтобы включить проверку AJAX, отправляющую асинхронные запросы точно таким же функциям проверки PHP.
Пример из моей структуры:
$Form = new AjaxForm();
$Form->add(new TextBox('Username', 'usernameavailable|length[3,12]'));
$Form->add(new SubmitButton());
Имея всего три строки, я создал полнофункциональную форму с проверкой как на стороне клиента, так и на стороне сервера. Конечно, все детали зависят от вас, но я все еще считаю, что следует ожидать неверный ввод данных пользователем, а не исключение.