Основная задача:
Главная идея в том, что бы у вас на каждый случай был класс. Ниже, мы рассмотрим пример с валидацией юзера. То есть, для валидации каждого поля мы создадим отдельный класс. Немножко громозко для случая с валидацией, но для примера, самое оно. Ну вот получили кучу классов, и что??? Правильно у нас еще будет и связующий абстрактный класс. Если говорить совсем просто то Strategy Pattern — это полиморфизм в чистом виде). Итак, что нам надо:
1. Один абстрактный класс, содержащий одинаковые для каждого случая методы
2. По классу на каждый случай, которые наследуют абстрактный класс и предназначены для конкретного случая
Классы буду содержать реализацию поставленной задачи.
Абстрактный класс:
<?php class Validations { public $error; // конструктор function Validations () { $this->validate(); } // абстрактный метод, который вызывается здесь в конструкторе, но будет определен в дочерних классах. abstract function validate() {} function setError ($msg) { $this->errorMsg[]=$msg; } function getError () { return array_pop($this->errorMsg); } // проверяет вилидно ли наше значение function isValid () { if ( isset ($this->errorMsg) ) { return false; } else { return true; } } } ?>
Ну все готово, теперь клепаем классики наследники на каждый случай, приставим что случая всего 2, проверка пароля и логина
Класс-наследник для проверки логина
<?php class ValidateLogin extends Validations { private $user; //конструктор function ValidateUser ($user) { $this->user=$user; $valid=new Validations(); } // Проверяет, корректно ли заполнено поле login, // если нет - пишем сообщение о ошибке в $error function validate() { if (!preg_match('/^[a-zA-Z0-9_]+$/',$this->user )) { $this->setError('Логин содержит заприщенные символы'); } if (strlen($this->user) < 6 ) { $this->setError('Логин слишком короткий'); } if (strlen($this->user) > 20 ) { $this->setError('Логин слишком длинные'); } } } ?>
Проверяем пароль:
<?php class ValidatePassword extends Validations { //Private $pass содержимое поля password var $password; //конструктор function ValidatePassword ($pass) { $this->pass=$pass; $valid=new Validations(); } function validate() { if (strlen($this->pass) < 6 ) { $this->setError('Парль слишко короткий'); } } } ?>
Все, испытываем
<? $checkLogin=new ValidateLogin('mylogin'); $checkPassword=new ValidatePassword('пароль'); if(!$checkLogin->isValid() || !checkPassword->isValid()) { тут пишем то, что должна сделать программа если логин и пароль не верен. } ?>
Вот и все! В реальной программе для проверки логин и пароля, конечно делать не стоит. P.S Я понимаю, что тут много есть людей которые считают такое детским садом, поэтому предупреждаю что это для новичков. Спасибо за внимание.
ссылка на оригинал статьи http://habrahabr.ru/post/176471/
Добавить комментарий