Самостоятельное создание сайта
Самостоятельная раскрутка и продвижение сайта

ООП и классы в php

    Веб разработка сайтов веб мастерами, приводит, со временем, к созданию отлаженных и эффективных кодов для решения различных задач. Представьте себе сайт с точки зрения архитектурного объекта. Ну, например, дом. Обычный жилой дом, в котором есть двери, окна, стены, крыша и т.д. Так вот, все эти элементы дома (двери и окна) это отдельные скрипты.

   ООП (объектно-ориентированное программирование) в разработке сайта - это способность манипулировать различными элементами для построения архитектуры сайта. В php отдельные элементы, которые выполняют узконаправленную функцию и могут быть полностью или частично автономные определяют в классы.
   Класс - это самостоятельный элемент (скрипт), который содержит в себе переменные, их значения и функции.
   На класс ложится ответственная задача выполнять отдельный процесс и управлять этим процессом. Например, почти у каждого веб программиста есть свой класс, который отвечает за соединение с базами данных. При необходимости веб мастер подключает этот класс и передает ему команду про получение данных. Класс самостоятельно выполняет запрос к базе данных, в случае необходимости он может привести запрос к требуемому виду (конструкции), самостоятельно определяет тип базы данных, обрабатывает полученный ответ и возвращает удобный для использования ответ. Как видите, класс это самостоятельный мощный инструмент, позволяющий оптимизировать часть работы.

   Как яркий пример ООП можно представить обычную CMS. Если у Вас был опыт работы с CMS, то Вы знаете, что CMS состоит из подключаемых модулей (текст, новости, фотогалерея, голосование, карта сайта), он же класс. Каждый модуль это набор скриптов и шаблонов, которые взаимодействуют между собой и выполняют задачу, за которую ответственный модуль.
   Целью ООП (объектно-ориентированное программирование) является изучение основ построения сайта на основе классов как отдельных объектов. Любой сайт собирается как конструктор из различных объектов, которые могут взаимодействовать между собой. Любая веб студия начиная работать над разработкой веб проектов, первым делом создает свои универсальные объекты. Конечно, совсем не обязательно создавать все с нуля, можно воспользоваться и распространенными в интернете популярными решениями. Однако, в конечном итоге, чтобы создать из набора объектов эффективный и функциональный сайт, необходимо создать свое ядро.
   Ядро сайта - класс, который дает задачу функциональным модулям сайта (объектам) и манипулирует ими. Если объект, еще можно где-то скачать, то ядро каждый создает самостоятельно.
   ООП особо актуально в больших сайтах, которые имеют сложное архитектурное построение и множество объектов. А для создания, небольших сайтов это носит скорее теоретический аспект.
   Однако, если задачи по созданию сайтов для Вас предстоят неоднократно. То, Вам так или иначе придется научится основам ООП. Ведь создав решение в одном проекте Вам нет смысла пересоздавать его еще раз, все что нужно это лишь перенести его и подключить.
   Здесь мы и подходим к самой главной задаче ООП - умение проектировать и глобально мыслить. Каждый раз решая задачу любой сложности Вы должны наперед продумать к какому объекту относится задача, стоит ли создавать ее отдельно или добавить к уже существующему объекту и как при этом добиться универсальности.
   Теперь, давайте, посмотрим что из себя представляет объект ООП в php (в качестве примера возьмем класс, не забывайте, что объект это относительное понятие и может быть представлен как в виде класса так и в виде части кода или набора скриптов):
 

<?php

class 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:
 

<?php

class 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 программисты стараются максимально разделять код в отдельные классы. Класс может иметь заранее предназначенные внутренние переменные со значением (действие класса по умолчанию) или ему могут назначаться новые значения внутренних переменных из среды вне класса. Класс может иметь неограниченное количество внутренних функций, которые могут вызывать друг друга. Все это в целом дает возможность создать эффективный и многофункциональный объект.

   Придерживаясь принципов объектно-ориентированного программирования (ООП) в создании сайтов, Вы намного эффективней сможете управлять своими частями кода, модифицировать, дополнять новыми функциями, заменять один объект другим и т.д.

1054
2.5 73
Рейтинг: +2.5 , голосов 73
Вы еще не голосовали!
Добавить комментарий (комментариев: 9)
Удалить ответ

Ваш почтовый ящик никогда не будет опубликован
Трудно разобрать цифры? Нажмите на рисунок, чтобы обновить.
#1 23/02/2011 11:19 игорь
reply
заметка хорошая только остались вопросы 1 это коды из java script var и еще это вы такое название чтоль придумали для простого примера $attribute_1; ?? если да то вам не кажется что вы переборщили с таким именем чтоб обьяснить на примере и так же сдесь $object_1 вижу что совпадают но тоже вопрос обязательно надо писаитть слово обьект я думаю вы поняли меня если это все обычные имена как мне кажется то этим вы только меня запутали


23/02/2011 17:33 admin
))) в примере указано следующее:

var $attribute_1;
...
var $attribute_N;

что означает от 1 до N-го значения, то и есть сколько угодно, тоже самое и с обьектами, поэтому не привязывайтесь к названиям )))
что касается тегов, то они действительно вставляються только в конец, в данном случае, это просто моя недороботка, как-нибудь исправлю, да и давно хотел форму комментов изменить, все никак )))
#2 30/11/2010 21:53 Sorbing
reply
Советую заглянуть сюда ООП в PHP, если все же ощущаете трудности с пониманием..
#3 06/05/2010 09:16 supercharged
reply
to admin Да статью про парадигму в ООП я читал но мне пока непонятны некоторые вещи, допустим я так и не смог найти описания интерфейсов классов, Очень понравилась сама модель построения.Но все же мне казалось что классы существуют именно для создания объектов.
06/05/2010 10:57 admin
попробую кратко обьяснить суть интерфейса:
Цель интерфейса - установить взаимосвязь между классами или сцепление.
Интерфейс представляет из себя список названий функций (эти названия есть как бы константы для того класса, который подключен к интерфейсу). Пример интерфейса:

interface file_system { //функции для работы с файловой системой
function create_file();
function delete_file();
}

Теперь внимание! Допустим класс А и B имеют интерфейс file_system, значит они имеют все внутренние функции интерфейса (в примере создание и удаление файлов), но сама реализация этих функций может быть разной, по сути она вообще не играет роль. Самой важное, что программист смотрит какие интерфейсы подключены класу и он может написать/подключить новый/другой класс вызывая функции интерфейса. По сути интерфейс это не крутая надстройка, а всего лишь краткий список возможностей класса.

Что касается мысли, что классы служат только для создания обьектов, то это лишь частично так. Классы могут также быть абстрактные и статические. Абстрактные классы могут вообще не иметь объектов/экземпляров, впрочем и статические тоже. Приведу пример, представим ситуацию, когда существует 3 класса:
- класс А (абстрактный) имеет задачу криптование данных;
- класс B имеет задачу создание/запись файла;
- класс C расширяем классом A и он имеет задачу обработка данных пользователя (в том числе с криптованием) и сохранения данных в файл.

Да кстате, если хотите узнать больше о природе классов и их взаимодействии, то можете изучить продукты моделирования классов компании Rational Software.
#4 05/05/2010 11:02 supercharged
reply
Я возможно неправильно понял автора, но зачем это было делать классом если можно было сделать просто функцией? если для примера использования класса то цель класса не совсем понятна, где объекты класса?
05/05/2010 16:31 admin
самими функциями иногда не обойтись, цель создания класса - это обеспечить полное выполнение глобальной автономной функции (это так прямыми словами). Класс это обьединение функциий, которые взаимодействуют между собой для выполнения общей более глобальной задачи. В примере статьи, я показал небольшой пример класса для обеспечения связи с mysql, помимо функции, которая выполняет отправку запроса и возврат данных, там могут быть также функции отвечающие:
- за предварительную подготовку данных;
- конструктор синтаксиса;
- проверку на наличие баз данных или таблиц;
- трансформатор структуры баз или таблиц и т.д.

Почитайте еще мою статью про парадигму в ООП.
У меня, например есть несколько десятков собственных классов, подключив которые, я могу сходу работать с файловой системой, выполнять запросы к mysql, кодировать, отправлять почту, парсить xml файлы и т.д.
#5 14/04/2010 11:22 спасибо Автору.
reply
спасибо Автору.
#6 01/04/2010 12:19 Коля
reply
Хороший и реальный пример. Спасибо.
#7 14/12/2009 17:39 Антон
reply
читая эту статью я просветлился. скорее всего, просто дошло то, что я сегодня прочитал, но случилось это именно сейчас. спасибо Автору.
#8 05/10/2009 22:40 Дэн
reply
Глядя на оформление эту статью публиковал тоже чайник
#9 17/07/2009 21:48 Михаил
reply
все очень и очень сложно для_восприятия!!!! хде ченить для чайников???

Дополнительно

» С чего начать сайт?

» Установка программ

» Пример создания сайта

» Хостинг и домен

» Оптимизация сайта

» Раскрутка сайта

» Заработок web-мастера

» Примеры PHP/Javascript

» Блог и мои записки

Последние новости

Статьи по рейтингу

» Особенности покупки контента 5.0 1
» Выбор хостинга 4.8 5
» Поисковые системы 4.7 9
» Курс молодого web-мастера 4.6 21
» Где взять бесплатные ссылки 4.5 11
» Что такое сниппеты 4.5 6
» Addstudio - SEO модуль 4.5 4
» Отладка js и CSS 4.4 14
» Стратегия дохода на Sape.ru 4.3 3
» Каталоги и биржи статей 4.3 4