|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.02.2013, 13:36 | #1 |
Пользователь
Регистрация: 14.01.2013
Сообщений: 49
|
ООП + PHP Основы, способы и цели
ООП в PHP Всем доброго времени суток. В этом посте, я бы хотел рассказать об Объектно ориентированном подходе (ООП) в PHP. Читая форум, ни раз натыкался на непонимание этого метода программирования и желание его понять и изучить. Для кого этот пост? В этом посте разговор будет идти про самые АЗЫ работы с ООП и про такую не маловажную деталь как способ и цели его применения, по этому, если вы считаете что все это вам известно и ищите информацию для продвинутых пользователей, то смело можете покинуть эту тему. Ничего нового вы тут не найдете.В этом посте я не буду рассказывать про HTML CSS и PHP в целом. Тема рассчитана на пользователей, владеющих азами создания PHP сайтов. Что будем делать? Для освоения и понимания ООП я перелопатил кучу литературы и пересмотрел кучу видеокурсов.Сразу замечу что все эти курсы абсолютно бесполезны. Везде в качестве примеров использования ООП приводятся объекты из реальной жизни и сама суть и цель использования этого подхода не раскрывается, тогда как сама по себе работа с ООП очень проста. Я же хочу на примере простого сайта рассказать и показать все плюсы использования ООП. Сначала мы создадим сайт процедурно, а потом постепенно будем упрощать код. Что получим в итоге? В итоге у нас получится простой сайтик - каталог статей. Все статьи будут разбиты на категории и под категории. Все это будет реализовано средствами ООП. Чего тут нет? При написании кода я не буду заострять внимание на безопасности и оптимизации.Не смотря на то, что конечный САЙт будет полностью работоспособен, я крайне не рекомендую его использовать в таком виде, как мы его закончим. Так же не будет уделяться внимание дизайну. Я буду использовать табличный стиль. Данный метод является устаревшим и ресурсоемким, а для блочного стиля придется уделять внимание CSS, что не входит в цели данного поста. Проще говоря после прочтения данного поста у Вас будет о чем подумать!). Для упрощения я не буду блистать английским, большую часть пишу в транслите. |
07.02.2013, 13:38 | #2 |
Пользователь
Регистрация: 14.01.2013
Сообщений: 49
|
Основные принципы ООП PHP И так ключевым слово этого подхода является ОБЪЕКТ. По сути ООП это создание ОБЪЕКТОВ на основе ШАБЛОНОВ ШАБЛОНЫ объектов называются КЛАССАМИ и прежде чем создать объект нам нужно создать его шаблон - КЛАСС В классе мы можем: объявить переменные, которые будут являться СВОЙСТВАМИ будущего объекта создать функции, которые будем называть методами будущего объекта. По сути мы создаем среду разработки (свой язык программирования) Для использования этого языка нам нужно знать за что отвечает тот или иной КЛАСС, какие он имеет свойства и методы и в дальнейшем, не думая, просто оперировать этим, создавая объекты, на основании описанных классов. Как пример рассмотрим подключение к базе данных. Создадим PHP страничку в которой создадим наш первый класс Код:
Теперь на основе этого класса создаем объект (экземпляр этого класса) Код:
Ключевое слово NEW и указание КЛАССА db() на основе которого наш объект создан; Теперь заполним КЛАСС (шаблон объекта) свойствами необходимыми для подключения к базе Код:
в нашем случаи public. Что это, для чего нужно и какие есть еще рассказывать не буду. Теперь создаваемый объект $baza получает все свойства описанные в КЛАССЕ и мы можем к этим свойствам обращаться. Для этого указываем переменную нашего объекта и через "->" имя свойства Код:
Теперь создадим метод (функцию) которая будет делать то же самое. Метод класса объявляется как и простая функция только внутри созданного класса Код:
Код:
При обращении к методу как и к любой функции ставим скобки которые в дальнейшем будем использовать для передачи методу переменных. На основании изложенного создадим метод подключения к базе данных и запустим его. Код:
Зачем все это нужно? Куча кода путаница!!! Все верно НО! Если предположить что данный класс будет в отдельном файле db.php который лежит отдельной папке classes Код:
Код:
Код:
Однако теперь вы можете использовать папку classes при создании других сайтов. В этой папке можно создать кучу калассов и объектов один раз и использовать их, не переписывая однотипные коды заново. Создав описание каждого класса вы сможете с легкостью работать в команде и собственно созданной среде разработки. Последний раз редактировалось Stroy562; 07.02.2013 в 13:44. |
07.02.2013, 13:38 | #3 |
Пользователь
Регистрация: 14.01.2013
Сообщений: 49
|
Теперь опробуем все эти навыки на деле.
Приступаем к нашему сайту. У нас установлен ЛОКАЛЬНЫЙ сервер. (Как это сделать не спрашивайте. Не по теме) У нас создана база данных MySQL в которой две таблицы 1. Категории kat id int(11) AUTO_INCREMENT // id (номер) Категори текущей in_id int(11) // id (номер) Категори в которой находится текущая категория name varchar(50)// Имя категории 2 Статьи stat id int(11) AUTO_INCREMENT // id (номер) Статьи текущей in_id int(11) // id (номер) Категори в которой находится текущая статья name varchar(50)// Имя статьи opisan text() // Краткое описание статьи text text() //Сам текст статьи Как их создать и что это вообще такое - ТАЙНА ! И так приступим. Мы планируем что на нашем сайте будет размещен каталог статей. Каждая статья расположена в своей категории. Каждая категория может быть расположена в другой категории. Вложенность категорий не ограничена. На главной странице будут показаны заголовки и краткие описания последних 10 статей. На странице каждой категории заголовки и краткие описания всех статей в данной категории. Список категорий расположен в левой части а статьи в правой части страницы. И так создаем файл index.php со всеми HTML причиндалами. Код:
Размещаем таблицу из 3 строк Шапка высотой 50 пикселей с надписью "Каталог статей" Контент Подвал высотой 25 пикселей с надписью "Копирайт" Толщина рамки 0 Код:
В строку КОНТЕНТА вставляем еще таблицу из 2 столбцов. В левом список категирий В правом список статей или открытая статья Ширина левого 200 пикселей Толщина рамки 0 Код:
На этом верстку нашего сайта мы закончим! |
07.02.2013, 13:39 | #4 |
Пользователь
Регистрация: 14.01.2013
Сообщений: 49
|
Подключаемся к базе Код:
Выводим в левом столбце список корневых категорий (категории в которых in_id = 0) Все имена будем сортировать по алфавиту и каждое имя будет ссылкой на эту же страницу. В ссылках будем передавать параметр kat по методу GET. Код:
Теперь в левом стлбце у нас список категорий при клике по любой из них мы должны вывести список категорий вложеных в выбранную. Для этого проверяем есть ли у нас передача переменной kat по методу GET, если есть, то выводим категории с in_id равной kat если нет, то присваиваем kat 0 и на основании ее, выводим корневые категории Код:
С категориями разобрались. Теперь переходим к статьям. |
07.02.2013, 13:40 | #5 |
Пользователь
Регистрация: 14.01.2013
Сообщений: 49
|
Выводим в правой колонке последние 10 статей. То есть выводим 10 статей сортируя их по id в обратном порядке.
Наименование каждой статьи - ссылка которая методом GET передает переменную STAT этой же странице. Код:
Код:
|
07.02.2013, 13:41 | #6 |
Пользователь
Регистрация: 14.01.2013
Сообщений: 49
|
Теперь нам осталось организовать вывод выбраной статьи.
Все просто при выборе статьи нам передается переменная stat и нам не составлявит проблем вывести эту статью, но, что у нас при этом будет в левом столбце? А там будет список корневых категорий так как переменной kat нет. Хотелось бы, что бы при выборе статьи в левом столбце показывать категории которые находятся в той же категории что и статья. Для этого редактируем ссылку на статью и дабаляем тутда передачу переменной kat в которую заносим значение in_id. Далее нам нужно организовать условие для вывода списка статей в категории и вывода выбраной статьи. То есть если есть переменная stat, то выводим статью, если такой переменной нет, то список. Работаем! Код:
Наш сайт готов! Заполняем базу данных и все (принимаем меры безопасности и оптимизации) |
07.02.2013, 13:42 | #7 |
Пользователь
Регистрация: 14.01.2013
Сообщений: 49
|
Теперь давайте упростим код используя ООП Подключение к Базе (уже проходили) В папке classes создаем файл db.php в котором описываем КЛАСС db для подключения к базе Код:
Предлогаю сделать так: Класс kat будет у нас работать с категориями Класс stat со статьями Приступим В паке classes создаем фал kat.php с одноименным классом Код:
Обращаемся к ранее написанному коду. Первое что мы делали - это выводили корневые категории. Первый метод будет делать то же. Создадим его и назавем koren_kat Код:
Код:
Методу как и простой функции можно передавать значения. Мы можем передать этому методу, id категории, вложения которой нам нужно выводить. При этом учитываем, что если мы ничего не передаем то выводим корневые категории. Для этого присваиваем передаваемой переменной по умолчанию значение 0. И производим вывод с базы на ее основании. Код:
Это можно сделать в основном коде, а можно создать еще один метод который за это и будет отвечать. Уж если занимаемся ООП то давайте в нем все и будем делать. Создаем новый метод. Называем его kat_control Код:
и передаем ее методу koren_kat. Код:
Если внимательно посмотреть то можно догадаться что весь код я просто копирую из того что мы уже написали. На этом работу с классом категорий мы закончили. |
07.02.2013, 13:42 | #8 |
Пользователь
Регистрация: 14.01.2013
Сообщений: 49
|
Переходим к статьям Как уже можно догадаться в папке classes создаем stat.php с классом... Код:
Ну самое главное мы их будем читать, а значит первый метод это вывод нужной статьи stat_vew. Как наверно можно догадаться, для вывода нам понадобится ее id, который мы передадим в этот метод переменной stat. По умолчанию эта переменная как и с категориями у нас будет равна 0, а в методе создадим условие, что бы при нулевом значении статья не выводилась. Таким образом метод будет работать только в том случаи если в него передается переменная stat Код:
kor_stat - 10 последних статей (для главной странице) inner_stat - все статьи в выбранной категории, при этом id категории как всегда передаем в переменной kat Код:
И последний метод который мы создадим stat_control, который по аналогии с категориями будет работать со статьями. Данный метод определяет наличие передачи переменной stat и kat методом get и запускает нужный метод, передавая в него необходимые параметры Код:
|
07.02.2013, 13:43 | #9 |
Пользователь
Регистрация: 14.01.2013
Сообщений: 49
|
В известной папке classes, создаем classes.php, подключаем туда файлы db.php kat.php и stat.php и создаем объекты от ранее описанных классов
Не забывем подключиться к базе, после создания объекта $db методом DbStart Код:
Код подключения к базе мы просто убираем так как подключаемся в файле classes.php В результате получаем код: Код:
ДА . Код основной страницы значительно упростился но сколько мароки!!! Все верно Использовать ООП для подобный сайтиков просто глупо. Гораздо существенней помощь этого метода в работе над большими проектами, да еще и в команде. Классов и методов в них может быть ограмное колличество и зная какой, за что отвечает, создание проекта значительно упростится и ускорится. |
07.02.2013, 13:43 | #10 |
Пользователь
Регистрация: 14.01.2013
Сообщений: 49
|
В заключении хотелось бы немного поговорить о подключении классов в файле classes.php
В нашем примере файлов-классов всего три. А если в громадном проекте их будет несколько сотен? Да Инклюдить замаемся!). Для упрощение этой задачи воспользуемся функцией Код:
Эта функция определяет создание объекта и (в нашем случаи) переменной $class_name присваивает имя класса, на основании которого создается объект. Мы не зря создавали все классы в одноименных файлах. Теперь наш код файла classes.php то же упроститься с заделом на будущее (большое колличество классов) Код:
На этом все. Предупреждаю сразу что все писалось на лету и не тестировалось, по этому могут быть ошибки. Но целью было не создание работающего сайта и азы ООП Только АЗЫ... Самые АЗЫ Всем удачи!!! |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача ООП на php | Gamestop | Помощь студентам | 3 | 12.03.2014 14:59 |
ООП в php | Arsenx777 | PHP | 2 | 06.04.2012 20:20 |
основы ООП | phasha | Помощь студентам | 2 | 26.01.2012 15:10 |
Разработка основы класса. ООП | Walker32 | Фриланс | 3 | 22.12.2011 11:45 |
Манипуляторы и манипулируемые + Основы ООП | Izhic | Свободное общение | 9 | 13.06.2009 12:24 |