<?xml version="1.0" encoding="utf-8"?>
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">
<description>
<title-info>
<genre>sf_history</genre>
<author><first-name>Имя автора</first-name><last-name>Фамилия автора</last-name></author>
<book-title>Классы в PHP</book-title>
<date>Дата</date>
<lang>ru</lang>
</title-info>
<document-info>
<author><nickname></nickname></author>
<program-used>Lib converter jcms</program-used>
<id></id>
<version>1.0</version>
</document-info>
</description>
<body><title><p>Классы в PHP</p></title>
<section><p>Приветствую! Рано или поздно более-менее опытный программист задает себе вопрос: хороший ли код я пишу? Могу ли я что-то улучшить? Как облегчить себе жизнь? В статье пойдет речь об использовании классов в PHP.</p>
<p>Класс — это некий объект, который можно использовать при написании кода. Говоря человеческим языком, класс — это набор более-менее унифицированных (хотя и не всегда) функций, которые могут использоваться в программах по несколько раз.</p>
<p>Простая задача: нам в нескольких частях программы нужно подключаться к базе данных, делать запрос и обрабатывать полученные данные. Разумеется, можно каждый раз писать mysql_connect, mysql_select_db, mysql_query и т.п. Однако ведь мы имеем один и тот же код в нескольких местах программы (пускай даже скрипт нам позволяет подключиться только раз, но сайт ведь не состоит из одного скрипта!) Здесь-то и начинает осознаваться необходимость классов. Мы можем вынести, в нашем случае, функции подключения к БД в отдельную функцию, а там, где необходимо подключение, просто вызывать эту функцию. В этой статье я не собирался подробно описывать классы, лишь хочу показать преимущества их использования.</p>
<p>Класс может иметь два вида переменных: общие (public) и закрытые (private). Отличие между ними в следующем: мы можем влиять на общие переменные из скрипта, а закрытые могут изменяться только внутри класса. Это связано с вопросами конфиденциальности и безопасности.</p>
<p>Удобными средствами классов являются конструкторы и деструкторы. Конструктор — это функция, вызываемая при создании экземпляра класса (т.е., вызова его из скрипта). В PHP функция конструктора, или просто конструктор, должна называться __construct. Соответственно, деструктор представляет функцию, которая выполняется по завершении работы класса и должна называться __destruct.</p>
<p>Итак, нашему классу для работы с БД необходим отдельный файл, пусть db.class. В нем мы и создадим функцию подключения. Листинг класса (пояснения ниже):</p>
<p>В начале класса мы объявили переменные, которые будут использованы при работе этого класса (переменная link будет содержать идентификатор соединения MySQL). Рассмотрим конструктор. Переменные $h, $n, $p, $b будут задаваться при создании экземпляра класса. Они будут содержать параметры подключения — сервер, имя БД, пользователь, пароль. Конструкция $this-&gt;имя_переменной=значение присваивает переменной этого класса указанное значение. Это удобно, т.к. в разных классах могут быть переменные с одинаковым именем, а таким образом мы точно будем знать, к переменной из какого класса мы обращаемся. Далее функция подключения connect(). В первом условном блоке мы пытаемся присвоить переменной $link идентификатор соединения с БД. Если происходит ошибка, мы вызываем вымышленную функцию error() и задаем ей текст сообщения об ошибке (эту функцию для упрощения примера мы включать в класс не будем). В следующем условном блоке мы пытаемся выбрать БД, и, если этого не происходит, снова вызываем функцию ошибки. Функция connect() возвращает в переменной $noerrors значение false в случае ошибки.</p>
<p>Функция выполнения запроса query() очень проста: в ней мы присваиваем результат выполнения запроса, содержащегося в переменной $query, переменной $lQueryResult, либо вызываем функцию error() в случае ошибки. Функция query() возвращает результат запроса, который далее будет использоваться при создании массива для обработки и вывода данных.</p>
<p>Теперь, после того как мы создали класс, попробуем его использовать. Для этого необходимо подключить файл класса в наш PHP-скрипт, создать экземпляр класса, использовать его функции (называемые методами класса) и вывести результат. Листинг PHP-скрипта (описание ниже):</p>
<p>Рассмотрим этот скрипт построчно. Для работы с классом необходимо подключить к скрипту файл, где размещен класс. Дальше мы создаем экземпляр класса, т.е. говорим, что хотим использовать функции (методы) класса  Db с помощью переменной $Db. При создании экземпляра класса мы указали параметры для подключения к БД, которые перехватывает конструктор в классе. После этого вызываем функцию connect(), которая соединяется с БД. Дальше присваиваем переменной $query значение нашего запроса, после чего вызываем функцию query() для его выполнения. После присваиваем переменной $lRes результат запроса и в цикле выводим полученные данные.</p>
<p>Просто? Для начала не слишком понятно, однако в более сложных задачах такой подход значительно облегчит и структурирование программы, и удобство ее использования, и легкость ее модификации. К примеру, постраничный вывод результатов поиска. Мы просто передаем результат выполнения запроса нужному классу, он выполняет необходимые операции для разбиения по страницам, нам же только остается сказать echo $result.</p>
<p>Если изначально продумать класс и требуемые от него функции, можно значительно эффективнее использовать свое время, код будет значительно читабельнее. В конце концов, использование классов — это просто хороший тон.</p>
<p>Успехов!</p>
</section>
</body>
</FictionBook>