Создание классов в php и ООП
Главная  
Про проект  
Книги  
Обмен ссылками  
Сервис  
Добавить статью  
Главная
Про проект
Книги
Обмен ссылками
Сервис
Добавить статью
Главная
dragon
Статьи в разделе:
Пример создания сайта
всего статей (13)

» Выбор движка сайта
» Парадигма ООП в php
» ООП и классы в php
» Использование Ajax
» Использование smarty
» Переменные php, метод Get и Post
» Favicon - иконки Вашего сайта
» Таблица символов в html коде
» Технология создания web-проекта
» Практический урок
» Создаем «файл-шаблон»
» Создаем «файл PHP»
» Полезные елементы сайта

Другие разделы:
    Подготовка к созданию сайта
    Установка програм
    Хостинг и домен
    Оптимизация сайта
    Раскрутка сайта
    Заработок Web-мастера
    Примеры PHP/Javascript

 
 
 
sape
 
Кнопка сайта:
Самостоятельное создание сайта, веб-дизайн, web-программирование, продвижение и оптимизация сайта
Создание сайтов. Гарантии - разработка сайта. Разработка сайтов под ключ.




По всем вопросам пишите на webmaster@info-pages.com.ua. Вы можете свободно использовать/размещать/перепечатывать статьи сайта всего лишь указав ссылку на источник.
Создание классов в php и ООП
  

   Принципы ООП и классы в php

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

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

   Придерживаясь принципов объектно-ориентированного программирования (ООП) в создании сайтов, Вы намного эффективней сможете управлять своими частями кода, модифицировать, дополнять новыми функциями, заменять один объект другим и т.д.
Ваша оценка:
 kod
Проголосовать!
Спасибо, Вы успешно
проголосовали!
Ошибка скрипта,
сообщите администратору!
Ошибка,
неверный код!
Вы уже голосовали!
Текущий рейтинг: +2, проголосовало 15
Комментариев к статье (9)
Комментарий добавил: Михаил 21:48 17.07.09
все очень и очень сложно для_восприятия!!!! хде ченить для чайников???:sos
Комментарий добавил: Дэн 22:40 05.10.09
Глядя на оформление эту статью публиковал тоже чайник :]
Комментарий добавил: Антон 17:39 14.12.09
читая эту статью я просветлился. скорее всего, просто дошло то, что я сегодня прочитал, но случилось это именно сейчас. спасибо Автору.
Комментарий добавил: Коля 12:19 01.04.10
Хороший и реальный пример. Спасибо.
Комментарий добавил: спасибо Автору. 11:22 14.04.10
спасибо Автору.
Комментарий добавил: supercharged 11:02 05.05.10
Я возможно неправильно понял автора, но зачем это было делать классом если можно было сделать просто функцией? если для примера использования класса то цель класса не совсем понятна, где объекты класса?
Комментарий добавил: admin 16:31 05.05.10
самими функциями иногда не обойтись, цель создания класса - это обеспечить полное выполнение глобальной автономной функции (это так прямыми словами). Класс это обьединение функциий, которые взаимодействуют между собой для выполнения общей более глобальной задачи. В примере статьи, я показал небольшой пример класса для обеспечения связи с mysql, помимо функции, которая выполняет отправку запроса и возврат данных, там могут быть также функции отвечающие:
- за предварительную подготовку данных;
- конструктор синтаксиса;
- проверку на наличие баз данных или таблиц;
- трансформатор структуры баз или таблиц и т.д.

Почитайте еще мою статью про парадигму в ООП.
У меня, например есть несколько десятков собственных классов, подключив которые, я могу сходу работать с файловой системой, выполнять запросы к mysql, кодировать, отправлять почту, парсить xml файлы и т.д.
Комментарий добавил: supercharged 09:16 06.05.10
to admin Да статью про парадигму в ООП я читал но мне пока непонятны некоторые вещи, допустим я так и не смог найти описания интерфейсов классов, Очень понравилась сама модель построения.Но все же мне казалось что классы существуют именно для создания объектов.
Комментарий добавил: admin 10:57 06.05.10
попробую кратко обьяснить суть интерфейса:
Цель интерфейса - установить взаимосвязь между классами или сцепление.
Интерфейс представляет из себя список названий функций (эти названия есть как бы константы для того класса, который подключен к интерфейсу). Пример интерфейса:

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

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

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

Да кстате, если хотите узнать больше о природе классов и их взаимодействии, то можете изучить продукты моделирования классов компании Rational Software.
Д О Б А В И Т Ь    К О М М Е Н Т А Р И Й:
   Ваше имя:
   
   Почтовый ящик @:
    * - не отображается
   Текст комментария:
   



   Введите защитный код: :) :( ;) :| 8) :] :0 :S :Ok :sos :B B( yes boom write
   kod
   
 

Где еще почитать на эту тему?
 

                                                                                                                                                                                                                                                                                                                                                                                 
Авторизация

Логин:
Пароль:



















 
Все права защищены, 2007-2009рр. статей: всего 71, на модерации 245; комментариев: 331, ссылок: всего 15, новых 0; выполнено за 0.36 sec. Карта сайта