Создание библиотеки функций

Как только появляются многократно используемые фрагменты кода, сразу хочется загнать их куда-нибудь в библиотеку и вызывать по мере необходимости. В PHP библиотеку можно построить на основе классов. Поскольку классы будут использоваться, в основном, для работы с базами данных, создавать их можно на основе соответствующих классов библиотеки ADODB (есть в составе VCL, смотри полезные ссылки). В качестве альтернативного варианта можно создать в Delphi for PHP новый модуль (в котором автоматически будет создан класс), набросать на него необходимые компоненты для работы с БД и написать соответствующие функции. Причем, поскольку отображать ничего не потребуется, можно использовать не Unit, а невизуальный контейнер компонентов DataModule. Разумеется, можно использовать этот способ организации библиотеки для работы с любыми компонентами, а не только с компонентами доступа к данным. Преимущества такого способа - быстрое задание свойств компонентов через инспектор объектов ну и, конечно, идеологическая выдержанность. Среди недостатков - необходимость использовать в каждой процедуре создание нового экземпляра модуля данных и загрузка файла ресурсов.

В качестве примера рассмотрим функцию аутентификации пользователя. В целях обеспечения безопасности желательно использовать ее в каждом модуле, передавая данные из окон ввода имени и пароля (на странице аутентификации) или из переменных сессии (на других страницах). Загоним ее в библиотеку. Для этого создадим новый модуль данных с именем unit4 (File - New - DataModule), разместим на нем компоненты Database и Query и настроим соединение с базой данных (смотри сюда). В модуле пишем функцию veriPass проверки имени пользователя и пароля:

                //проверка пользователя и пароля
               function veriPass($name,$pass)
               {

                 //создаем модуль данных и загружаем файл ресурсов
                 global $application;
                 global $Unit4;
                 $Unit4=new Unit4($application);
                 $Unit4->loadResource(__FILE__);

                 //открываем соединение
                 $this->Database1->Open();

                 //устанавливаем кодировку запросов
                 $sql="SET NAMES cp1251";
                 $this->Query1->SQL=$sql;
                 $this->Query1->LimitStart='-1';
                 $this->Query1->LimitCount='-1';
                 $this->Query1->Open();
                 $this->Query1->Close();

                 //выполняем запрос для проверки наличия пользователя в базе
                 $sql="select id from table1 where name='" . $name . "'" . " and pass='" . $pass . "'";
                 $this->Query1->SQL=$sql;
                 $this->Query1->Open();

                 //должна быть только одна такая запись
                 if ($this->Query1->readRecordCount()==1)
                 {

                   $id=$this->Query1->id;
                   //закрываем соединение
                   $this->Query1->Close();
                   $this->Database1->Close();

                   return $id;

                 }
                 else
                 {

                   //закрываем соединение
                   $this->Query1->Close();
                   $this->Database1->Close();

                   return 0;

                 }

              }

Входными параметрами являются имя пользователя и пароль, передаваемые на проверку. Выходной параметр - ID пользователя, если он найден, или 0, если не найден. В вызывающем модуле в разделе Includes необходимо поставить ссылку на используемую библиотеку:

        //Includes
        require_once("vcl/vcl.inc.php");
        use_unit("dbtables.inc.php");
        use_unit("forms.inc.php");
        use_unit("extctrls.inc.php");
        use_unit("stdctrls.inc.php");

        //наша библиотека
        require_once("Unit4.php");

Вызов функции осушествляется обычным порядком (имя и пароль для проверки берутся из полей Edit1 и Edit2):

               function Button3Click($sender, $params)
               {

                 $b=Unit4::veriPass($this->Edit1->Text, $this->Edit2->Text);

                 if ($b>0)
                 {
                   //обработка успешной аутентификации
                 }
                 else
                 {
                   //обработка неудачной аутентификации
                 }
                
               }

Полезные ссылки:
http://rsdn.ru/article/inet/php_5_prof.xml
http://izone.kiev.ua/articles/php/4/320.htm (абстрактный класс доступа к данным ADODB)
http://php.russofile.ru/ru/translate/unsort/php4_to_php5/ (работа с классами в PHP5)


© re-stichka.narod.ru
При публикации данного материала ссылка на источник обязательна.

Hosted by uCoz