Классы в PHP

Приветствую! Рано или поздно более-менее опытный программист задает себе вопрос: хороший ли код я пишу? Могу ли я что-то улучшить? Как облегчить себе жизнь? В статье пойдет речь об использовании классов в PHP. Класс — это некий объект, который можно использовать при написании кода. Говоря человеческим языком, класс — это набор более-менее унифицированных (хотя и не всегда) функций, которые могут использоваться в программах по несколько раз. Простая задача: нам в нескольких частях программы нужно подключаться к базе данных, делать запрос и обрабатывать полученные данные. Разумеется, можно каждый раз писать mysql_connect, mysql_select_db, mysql_query и т.п. Однако ведь мы имеем один и тот же код в нескольких местах программы (пускай даже скрипт нам позволяет подключиться только раз, но сайт ведь не состоит из одного скрипта!) Здесь-то и начинает осознаваться необходимость классов. Мы можем вынести, в нашем случае, функции подключения к БД в отдельную функцию, а там, где необходимо подключение, просто вызывать эту функцию. В этой статье я не собирался подробно описывать классы, лишь хочу показать преимущества их использования. Класс может иметь два вида переменных: общие (public) и закрытые (private). Отличие между ними в следующем: мы можем влиять на общие переменные из скрипта, а закрытые могут изменяться только внутри класса. Это связано с вопросами конфиденциальности и безопасности. Удобными средствами классов являются конструкторы и деструкторы. Конструктор — это функция, вызываемая при создании экземпляра класса (т.е., вызова его из скрипта). В PHP функция конструктора, или просто конструктор, должна называться __construct. Соответственно, деструктор представляет функцию, которая выполняется по завершении работы класса и должна называться __destruct. Итак, нашему классу для работы с БД необходим отдельный файл, пусть db.class. В нем мы и создадим функцию подключения. Листинг класса (пояснения ниже): <?php class Db { private $host; private $database; private $name; private $pass; private $link; public $query; // Конструктор public function __construct ($h, $n, $p, $b) { $this->host=$h; $this->name=$n; $this->pass=$p; $this->database=$b; } // Функция подключения к БД public function connect() { if (!($this->link=mysql_connect($this->host,$this->name,$this->pass))) { $this->error('Не могу подключиться к '.$this->host); $noerrors=false; } if (!mysql_select_db($this->database)) { $this->error('Не могу войти в базу '.$this->database); $noerrors=false; } return $noerrors; } // Функция выполнения запроса public function query() { $this->lQueryResult=mysql_query($this->query) or $this->error('Не могу выполнить запрос'); return $this->lQueryResult; } } ?> В начале класса мы объявили переменные, которые будут использованы при работе этого класса (переменная link будет содержать идентификатор соединения MySQL). Рассмотрим конструктор. Переменные $h, $n, $p, $b будут задаваться при создании экземпляра класса. Они будут содержать параметры подключения — сервер, имя БД, пользователь, пароль. Конструкция $this->имя_переменной=значение присваивает переменной этого класса указанное значение. Это удобно, т.к. в разных классах могут быть переменные с одинаковым именем, а таким образом мы точно будем знать, к переменной из какого класса мы обращаемся. Далее функция подключения connect(). В первом условном блоке мы пытаемся присвоить переменной $link идентификатор соединения с БД. Если происходит ошибка, мы вызываем вымышленную функцию error() и задаем ей текст сообщения об ошибке (эту функцию для упрощения примера мы включать в класс не будем). В следующем условном блоке мы пытаемся выбрать БД, и, если этого не происходит, снова вызываем функцию ошибки. Функция connect() возвращает в переменной $noerrors значение false в случае ошибки. Функция выполнения запроса query() очень проста: в ней мы присваиваем результат выполнения запроса, содержащегося в переменной $query, переменной $lQueryResult, либо вызываем функцию error() в случае ошибки. Функция query() возвращает результат запроса, который далее будет использоваться при создании массива для обработки и вывода данных. Теперь, после того как мы создали класс, попробуем его использовать. Для этого необходимо подключить файл класса в наш PHP-скрипт, создать экземпляр класса, использовать его функции (называемые методами класса) и вывести результат. Листинг PHP-скрипта (описание ниже): <?php require ('db.class'); $Db=new Db (‘localhost’, ‘user’, ‘password’, ‘db’); $Db->connect(); $Db->query="SELECT id, name FROM my_table"; $Db->query(); while ($lRes=mysql_fetch_array($Db->lQueryResult)) { echo ‘(’.$lRes[id].’) ’.$lRes[name].’
’; } ?> Рассмотрим этот скрипт построчно. Для работы с классом необходимо подключить к скрипту файл, где размещен класс. Дальше мы создаем экземпляр класса, т.е. говорим, что хотим использовать функции (методы) класса Db с помощью переменной $Db. При создании экземпляра класса мы указали параметры для подключения к БД, которые перехватывает конструктор в классе. После этого вызываем функцию connect(), которая соединяется с БД. Дальше присваиваем переменной $query значение нашего запроса, после чего вызываем функцию query() для его выполнения. После присваиваем переменной $lRes результат запроса и в цикле выводим полученные данные. Просто? Для начала не слишком понятно, однако в более сложных задачах такой подход значительно облегчит и структурирование программы, и удобство ее использования, и легкость ее модификации. К примеру, постраничный вывод результатов поиска. Мы просто передаем результат выполнения запроса нужному классу, он выполняет необходимые операции для разбиения по страницам, нам же только остается сказать echo $result. Если изначально продумать класс и требуемые от него функции, можно значительно эффективнее использовать свое время, код будет значительно читабельнее. В конце концов, использование классов — это просто хороший тон. Успехов!

Скачать файл txt fb2
Теги: php | oop
Добавил: Сталислав (14 янв 2009 г., 15:02)
Рейтинг: (1)
Прочитано: 23002