Как стать автором
Обновить

PHP: проверка данных

Время на прочтение2 мин
Количество просмотров2.9K
Думаю, все, кто когда-либо программировал, знают, как муторно и скучно зачастую бывает писать алгоритмы для проверки входных данных. Я хочу предложить вам одно решение, которое поможет собрать свою собственную базу, которую можно будет использовать от проекта к проекту, изменяя и дополняя под свои нужды.
Пример приведен на PHP, но, я уверен, вы без труда сможете перенести его на любой другой язык.

Идея заключается в использовании оператора switch. Вкратце, этот оператор позволяет сравнивать значение переменной и выполнять блоки кода в зависимости от результатов сравнения. Например, вместо такого:
<?php
if ($i == 0)
{
    echo "i равно 0";
}
elseif ($i == 1)
{
    echo "i равно 1";
}
elseif ($i == 2)
{
    echo "i равно 2";
}
?>

можно писать:
<?php
switch ($i)
{
    case 0:
        echo "i равно 0";
        break;
    case 1:
        echo "i равно 1";
        break;
    case 2:
        echo "i равно 2";
        break;
}
?>


Теперь представим, что у нас есть массив данных $a, содержащий строку с Именем (индекс name) и целочисленный Возраст (индекс age). Эти данные вводит пользователь, поэтому нам необходимо их проверить.
Для проверки у нас есть следующий класс:
<?php
class naughty_checks
{
    var $data = array();

    /* Конструктор класса, массив входных данных для проверки */
    function naughty_checks($data)
    {
        $this->data = $data;
    }
    
    /* Проверка на заполненность поля */
    function field_empty($field)
    {
        if (!isset($this->data[$field]) || strlen(trim($this->data[$field])) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
    /* Проверка, является ли поле целым положительным числом */
    function field_numeric($field)
    {
        if (!isset($this->data[$field]) || intval(trim($this->data[$field])) < 1)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}
?>

Это именно тот класс, который вы будете расширять своими собственными проверками.

А теперь основная соль. Я приведу проверку в виде обычного кода, думаю потом вынести ее в отдельный метод и прикрутить вывод сообщения об ошибках и прочие прелести вы сможете сами.
<?php

// $a -- наш массив

$error_flag = false;
$error_text = ''; // Текст ошибки

$_chck = new naughty_checks($a); // Инициализируем класс, передаем наш массив

/* Волшебство */
<b>switch (true)
{
    case($_chck->field_empty('name')):
        $error_flag = true;
        $error_text = 'Вы не заполнили поле Имя.';
        break;
    case($_chck->field_numeric('age')):
        $error_flag = true;
        $error_text = 'Вы не заполнили, или неправильно заполнили поле Возраст.';
        break;
}</b>

if ($error_flag)
{
    die($error_text);
}
else
{
    echo 'Have you ever seen a UFO?';
}
?>


Я надеюсь, что суть вы уловили. Такие switch'и можно объединять в методы и использовать для проверки определенных данных. Такой подход сделает ваш код более читаемым, нежели если вы будете использовать многочисленные операторы if.
Данный метод позволяет избежать лишних проверок, поскольку как только хоть один проверяющий метод вернет true, дальнейшие проверки выполняться не будут.


Вот такой вот не очень грандиозный, но все же интересный, с моей точки зрения, подход к проверке вводимых данных. Искренне надеюсь, что хоть кому-то это окажется полезным. Также, я с удовольствием, но в меру сил отвечу на все ваши вопросы в комментариях.


Собственно, это были мои мысли вслух.
Надеюсь, у вас тоже есть мысли, и вы не боитесь их высказать вслух…
Теги:
Хабы:
+5
Комментарии68

Публикации

Изменить настройки темы

Истории

Ближайшие события