Веб разработка сайтов веб мастерами, приводит, со временем, к созданию отлаженных и эффективных кодов для решения различных задач. Представьте себе сайт с точки зрения архитектурного объекта. Ну, например, дом. Обычный жилой дом, в котором есть двери, окна, стены, крыша и т.д. Так вот, все эти элементы дома (двери и окна) это отдельные скрипты.
ООП (объектно-ориентированное программирование) в разработке сайта - это способность манипулировать различными элементами для построения архитектуры сайта. В php отдельные элементы, которые выполняют узконаправленную функцию и могут быть полностью или частично автономные определяют в классы.
Класс - это самостоятельный элемент (скрипт), который содержит в себе переменные, их значения и функции.
На класс ложится ответственная задача выполнять отдельный процесс и управлять этим процессом. Например, почти у каждого веб программиста есть свой класс, который отвечает за соединение с базами данных. При необходимости веб мастер подключает этот класс и передает ему команду про получение данных. Класс самостоятельно выполняет запрос к базе данных, в случае необходимости он может привести запрос к требуемому виду (конструкции), самостоятельно определяет тип базы данных, обрабатывает полученный ответ и возвращает удобный для использования ответ. Как видите, класс это самостоятельный мощный инструмент, позволяющий оптимизировать часть работы.
Как яркий пример ООП можно представить обычную CMS. Если у Вас был опыт работы с CMS, то Вы знаете, что CMS состоит из подключаемых модулей (текст, новости, фотогалерея, голосование, карта сайта), он же класс. Каждый модуль это набор скриптов и шаблонов, которые взаимодействуют между собой и выполняют задачу, за которую ответственный модуль.
Целью ООП (объектно-ориентированное программирование) является изучение основ построения сайта на основе классов как отдельных объектов. Любой сайт собирается как конструктор из различных объектов, которые могут взаимодействовать между собой. Любая веб студия начиная работать над разработкой веб проектов, первым делом создает свои универсальные объекты. Конечно, совсем не обязательно создавать все с нуля, можно воспользоваться и распространенными в интернете популярными решениями. Однако, в конечном итоге, чтобы создать из набора объектов эффективный и функциональный сайт, необходимо создать свое ядро.
Ядро сайта - класс, который дает задачу функциональным модулям сайта (объектам) и манипулирует ими. Если объект, еще можно где-то скачать, то ядро каждый создает самостоятельно.
ООП особо актуально в больших сайтах, которые имеют сложное архитектурное построение и множество объектов. А для создания, небольших сайтов это носит скорее теоретический аспект.
Однако, если задачи по созданию сайтов для Вас предстоят неоднократно. То, Вам так или иначе придется научится основам ООП. Ведь создав решение в одном проекте Вам нет смысла пересоздавать его еще раз, все что нужно это лишь перенести его и подключить.
Здесь мы и подходим к самой главной задаче ООП - умение проектировать и глобально мыслить. Каждый раз решая задачу любой сложности Вы должны наперед продумать к какому объекту относится задача, стоит ли создавать ее отдельно или добавить к уже существующему объекту и как при этом добиться универсальности.
Теперь, давайте, посмотрим что из себя представляет объект ООП в php (в качестве примера возьмем класс, не забывайте, что объект это относительное понятие и может быть представлен как в виде класса так и в виде части кода или набора скриптов):
<
?phpclass NewClass {
var $attribute_1;
...
var $attribute_N;
function name_function_1() {
...$this->attribute_1...
}
function name_function_N() {
...$this->attribute_N...
}
}
$object_1 = new NewClass;
$object_N = new NewClass;
?>
Как видно в примере, конструкция класса напоминает конструкцию функции, только начинается со слова class. Внутри класса находятся объявленные переменные и функции. Это внутренние аргументы класса и они могут менять свое значение и выполнятся только при обращение к ним через сам класс. Другими словами, никакие внешние переменные или функции не могут повлиять на значение переменных и вызвать функции находящиеся внутри класса. Это свойство ООП носит название "инкапсуляция" - все находится внутри капсулы (объекта в виде обычной переменной).
Чтобы обратится к внутренней переменной (функции) класса внутри класса, используется следующий шаблон:
$this->attribute_1 (для функций: $this->name_function_1(param1, paramN)),
а чтобы обратится к внутренней переменной (функции) класса из внешней среды такой шаблон:
$object_1->attribute_1 (для функций: $object_1->name_function_1(param1, paramN)).
В последней строке примера, мы создаем сколько угодно новых объектов класса NewClass под названием $object_N.
Посудите сами, класс один, а объектов может быть сколько угодно. Помните, в начале статьи я сравнил сайт с архитектурной точки зрения с домом, так вот в доме может быть одна крыша, 4 стены и 6 окон и всего нам необходимо создать для этого 3 класса. А чтобы Вы поняли еще более наглядно с точки зрения веб, то представьте себе информационный новостной сайт, у которого есть 2 ленты новостей: вертикальная (подробная) и горизонтальная (список новостей). Так вот, это являются 2 объекта одного класса "Новости", только используют они вывод информации по разным шаблонам. Вы, также, часто видели на некоторых сайтах, рейтинги опубликованных статей (информации), представленные в виде звездочек - все они идентичные экземпляры своего класса.
Итак, целью этой статьи является посвятить Вас в основы ООП. Вы должны смотреть на процесс по созданию сайта глобально. Поделите свой сайт на условные автономные объекты. Тут появляется вопрос: Как же определить что есть объектом, а что не есть объектом?
Объект - это аналитическая часть страницы или сайта (объединение вычислительной (логики) и визуальной (представление) части сайта).
К аналитической части страницы можно отнести:
- основной текст вместе с названием, датой, подписью, рисунком;
- рейтинг статьи;
- форма комментария;
- блок новостей;
- блок поиска по сайту;
- навигационный блок;
- рекламный блок и т.д.
К аналитической части сайта можно, также отнести:
- класс ответственный за соединения с базой данных;
- класс генератор страницы по шаблону;
- статистический класс и т.д.
Каждый объект является самостоятельным, его можно подключать или отключить и этом никак не отразится на работе других объектов. Каждый объект можно модернизировать и это коснется только его внутреннего кода. И наконец, его можно перенести в другой веб проект, просто подключить и он будет прекрасно работать. Это основное преимущество ООП - объекты автономны, легко настраиваются и модернизируются.
Давайте, теперь перейдем к практическому созданию класса. Сделаем класс, который будет соединятся с базой данных MySQL:
<
?phpclass link_mysql {
var $dbhost = 'localhost'; // Хост
var $dbuser = 'procter'; // Имя пользователя
var $dbpassword = 'gamble'; // Пароль
var $dbname = 'my_base'; // Имя базы данных
// Подключаемся к mysql серверу и получаем данные по запросу + получаем id вставленного рядка
function post_mysql_query ($query) {
mysql_select_db($this->dbname, mysql_connect($this->dbhost, $this->dbuser, $this->dbpassword));
return array(mysql_query($query, mysql_connect($this->dbhost, $this->dbuser, $this->dbpassword)),mysql_insert_id());
mysql_close(mysql_connect($this->dbhost, $this->dbuser, $this->dbpassword));
}
}
$link_mysql = new link_mysql();//создаем новый объект класса link_mysql
?>
У меня получился такой вот небольшой класс "link_mysql", которому мы передаем SQL запрос, а он нам возвращает результат и номер id последнего активного рядка (это может быть полезным когда необходимо, например, вставить новый рядок и получить его id) в виде массива. Чтобы сделать запрос к базе данных необходимо подключить данный скрипт и обратится к внутренней функции класса "link_mysql":
<
?php$result = $link_mysql->post_mysql_query("CREATE TABLE `tbl_stat` (`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`point` TEXT NOT NULL ) ENGINE = MYISAM");/*выполняем SQL-запрос по созданию таблицы `tbl_stat`*/
$result = $link_mysql->post_mysql_query("INSERT INTO `tbl_stat` ( `id` , `point` ) VALUES ( NULL , '1' );");/*выполняем SQL-запрос по созданию записи в таблицу `tbl_stat`*/
$id = $result[1];/*получаем номер id вставленной записи*/
$result = $link_mysql->post_mysql_query(" SELECT * FROM `tbl_stat` ");/*выполняем SQL-запрос по получению все записей из таблицы `tbl_stat`*/
?>
Если необходимо обратится к другой базе данных достаточно лишь сменить значение внутренней переменной класса, например:
$link_mysql->dbname = "other_base".
Как видите, работа с классами не представляет большой сложности. Все профессиональные web программисты стараются максимально разделять код в отдельные классы. Класс может иметь заранее предназначенные внутренние переменные со значением (действие класса по умолчанию) или ему могут назначаться новые значения внутренних переменных из среды вне класса. Класс может иметь неограниченное количество внутренних функций, которые могут вызывать друг друга. Все это в целом дает возможность создать эффективный и многофункциональный объект.
Придерживаясь принципов объектно-ориентированного программирования (ООП) в создании сайтов, Вы намного эффективней сможете управлять своими частями кода, модифицировать, дополнять новыми функциями, заменять один объект другим и т.д.