Разработка класса в PHP
Федеральное агентство по образованию РФ
Государственное образовательное учреждение высшего профессионального образования
«Волгоградский государственный университет»
Факультет математики и информационных технологий
Кафедра компьютерных наук и экспериментальной математики
КУРСОВАЯ РАБОТА
СОЗДАНИЕ КЛАССА В PHP
Выполнил:
студент 1 курса
Пшеничный Сергей Васильевич
Научный руководитель
д.ф.-м.н, заведующий кафедры КНЭМ
Клячин Владимир Александрович
Волгоград 2008
Содержание
Введение
Глава 1 – Основные понятия объектно-ориентированного программирования в PHP
1.1 Сравнение структурного и объектно-ориентированного подходов к программированию
1.2 Класс как абстрактный тип
1.3 Конструкторы и деструкторы
1.4 Объекты
Глава 2 – Реализация класса
2.1 Функция l_visited_style (изменение стиля посещенных ссылок)
2.2 Функция l_hover_style (изменение стиля ссылок при наведении)
2.3 Функция l_link_style (изменение стиля не посещенных ссылок)
2.4 Функция add_item (добавляет элемент в массив)
2.5 Функция add_img_item (добавляет ссылку-рисунок в массив)
2.6 Функция gor_nav_create (создает горизонтальное меню навигации из массива)
2.7 Функция vert_nav_create (создает вертикальное меню навигации из массива)
2.8 Функция title_create() (создает заголовок страницы)
2.9 Пример использования
Заключение
Список литературы
Введение
Язык PHP был создан осенью 1994 года, программистом Расмусом Лердорфом. Лердорф собирался написать простой «движок» для своей персональной странички и завершил эту работу к началу 1995 года. Движок был написан на языке Perl и умел делать очень немного, так как создавался только для подсчета количества посетителей странички Расмуса. Этот движок был назван Personal Home Page Tools (PHPT), и единственной его возможностью был подсчет посетителей.
Стоит заметить, что в 1994 году никаких инструментов для создания различных приложений для Web еще не было, да и сам Web только еще начинался. Поэтому те задачи, которые решала программа Расмуса, были актуальны для очень многих пользователей сети, и к нему хлынул поток писем с просьбами предоставить свой инструментарий. К концу 1997 года два программиста Зив Сураски и Энди Гутманс переписали первоначальный лексический анализатор, и к лету 1998 года в полной мере увидела свет третья версия языка – PHP 3. Развитие PHP стремительно продолжалось, в язык сотнями добавлялись новые функции, и в 1999 году число разработчиков, использующих PHP, превысило 1 миллион, что сделало PHP одним из самых популярных языков для разработки Web – приложений. К этому времени к разработке языка подключилось большое количество программистов со всего мира.
На настоящий момент используется пятая версия языка PHP. Данный язык набирает все большую популярность, ведь его возможности практически не ограничены. Однако, еще большей его популяризации мешает тот факт, что далеко не все пользователи решившие создать свой сайт или страничку умеют программировать на достаточно высоком уровне. Именно эту проблему частично мы и попытаемся решить. Целью данной работы является создание класса, облегчающего программисту создание меню навигации.
Глава 1 – Основные понятия объектно-ориентированного программирования в PHP5
Переход от структурного программирования к объектно-ориентированному связан, в первую очередь, с возрастающей сложностью создаваемого программного обеспечения. В первое время программы не превышали нескольких сотен строк. Увеличение количества кода в программах до нескольких тысяч строк привело к внедрению приемов структурного программирования (появились функции), что позволило создавать и сопровождать программы размерами до ста тысяч строк. Стремительное развитие программного обеспечения потребовало создания и сопровождения еще большего объема кода. Ответом на это было создание объектно-ориентированной технологии. Применение данной технологии дает возможность создавать еще большие по объему приложения и позволяет программисту оперировать при создании кода объектами реального мира, а не архитектурой компьютера.
Объектно-ориентированный подход за последние два десятилетия получил широкое распространение. Он используется во многих языках программирования, в том числе и в PHP 5.
1.1 Сравнение структурного и объектно-ориентированного подходов к программированию
Все языки программирования построены на абстракции. Первые ассемблеры были абстракциями машинных кодов, программирование на которых требовало детального знания архитектуры компьютера. Введение ассемблера позволило не запоминать огромного числа кодов процессора и правил их применения. В свою очередь языки высокого уровня, появившиеся вслед за ассемблером, были абстракцией ассемблера. Появление структурного подхода к программированию характеризуется в первую очередь применением функций, когда часть кода можно оформить в виде функции и использовать его несколько раз в разных местах программы. Такой прием позволяет не только повторно использовать код, но и отлаживать его небольшими блоками, которые соответствуют конкретным задачам.
Объектно-ориентированный подход моделирует не отдельные процессы, а объекты реального мира и их поведение. Программа может адаптироваться к усложнению реального мира, создавая новые типы объектов. Таким образом, объектно-ориентированный подход позволяет описать задачу в ее терминах, а не терминах компьютера.
Сознание человека оперирует понятиями, которые являются абстракциями отдельных предметов. Понятию «стол» удовлетворяют все столы мира. Если уточнить понятие: «серый стол», то данное понятие исключает из рассмотрения все столы, цвет которых отличен от серого. Более уточненное понятие «серый стол с выдвижными ящиками» еще более сужает число столов удовлетворяющих этому определению. Характеризуя объект «стол» все большим числом параметров, от абстрактного понятия можно прийти к вполне конкретному предмету.
Такой подход взяли на вооружение создатели объектно-ориентированной технологии. В основе этой технологии лежит конструкция, называемая классом, играющая роль «понятия». Класс состоит из переменных, называемых членами класса, которые содержат в себе различные характеристики нашего понятия. У предметов могут быть как легко заметные характеристики, так и скрытые. Так, при работе с телевизором мы можем воспользоваться пультом управления для изменения контрастности и яркости изображения, громкости звука, а различные микросхемы и другие детали устройства телевизора скрыты от нас корпусом и не доступны в повседневном обращении. Точно так же и члены класса могут быть открытыми и закрытыми.
Помимо статических характеристик, у объектов имеются так же характеристики, связанные с их поведением или действиями, совершаемыми над ними. Такие динамические характеристики объекта моделируются в классе отдельными функциями, называемыми методами класса.
Таким образом, классы – это конструкции, моделирующие наши понятия. Класс применяют как расширенный тип переменной. Только при объявлении такой «переменной» мы получаем не обычную переменную, а модель объекта, которую далее будем называть просто объектом. При этом объект разделен на две части: закрытую, которая доступна только функциям внутри объекта, и открытую, которую можно вызвать для этого объекта из текста основной программы.
Уточнение класса (понятия) происходят с помощью специального механизма, названного наследованием. При объявлении класса можно узнать, что новый класс наследует от уже существующего.
Помимо наследования, существует другой тип отношений, называемый агрегацией. Классы могут в качестве членов содержать другие объекты. Если класс «водный транспорт» может быть базовым для подводной лодки, крейсера, лайнера, то в свою очередь любой из кораблей может содержать такие объекты, как палуба, двигатель, навигационное оборудование и т.д. Причем количество и вид объектов, содержащихся в классе, не ограничено.
1.2 Класс как абстрактный тип
Класс это конструкция, задающая образец, по которому будет построен объект. Образно говоря, можно представить его как форму, с помощью которой отливают детали на металлургических производствах. Единожды разработав такую форму с нужными геометрическими параметрами, можно отлив из нее любое количество деталей, которые будут точными копиями друг друга и этой формы. Точно так же в программе, один раз написав класс, можно затем создавать любое количество объектов этого класса, которые будут содержать все переменные и методы, которые есть у их класса.
Объявление класса осуществляется с помощью ключевого слова class, за которым следуют название класса и компоненты класса в фигурных скобках.
Объект класса объявляется с помощью ключевого слова new, за которым следует название класса. Как только объект класса объявлен, появляется возможность обращаться к его компонентам с помощью уточненного имени, которое включает имя объекта, следующую за ним стрелку (->) и имя метода и члена класса.
Методы и члены класса могут вызываться не только из внешней программы, но и из самого класса. Для того чтобы обратиться к переменной или методу класса внутри класса, это обращение необходимо предварить конструкцией $this->. Переменная $this, которая неявно присутствует в каждом классе, является ссылкой на текущий объект класса и сообщает интерпретатору PHP, что вы обращаетесь к переменной данного класса, а не создаете новую. Членам класса можно присваивать значения, как обычным переменным программы.
1.3 Конструкторы и деструкторы
Среди методов класса различают два особых метода: конструктор и деструктор. Конструктор – это специальный метод класса, предназначенный для инициализации членов класса. Этот метод выполняется раньше всех остальных методов класса во время объявления объекта. В конструкторе обычно осуществляют инициализацию членов класса и резервирование ресурсов, необходимых для работы объекта, - выполняется открытие файлов, соединение с базой данных и т.д. Для того чтобы использовать в классе конструктор, необходимо объявить в нем метод с именем _construct().
Деструктор – это специальный метод класса, предназначенный для освобождения ресурсов, занятых объектом во время его существования. Этот метод всегда вызывается после всех остальных методов во время уничтожения объекта. В нем можно закрыть открытые файлы, отсоединиться от базы данных.
Конструктор и деструктор – это ключевые методы класса. Их наличие является одним из признаков объектно-ориентированной технологии. Но это не значит, что в каждом классе обязательно должны быть констуктор и деструктор – это необязательные элементы класса и их следует применять только при необходимости.
1.4 Объекты
Объекты объявляются с помощью ключевого слова new и являются экземпляром класса. Можно объявить несколько объектов (экземпляров) класса, точно так же как одному понятию стола может соответствовать несколько реальных столов, а из одной литейной формы можно получить много деталей.
Объекты являются такими же полноценными переменными. Можно создавать массив объектов, но при работе с ним необходимо учитывать особенности объявления и оперирования объектами.
Объекты, как и обычные переменные, можно передавать в качестве аргумента функции. Они могут выступать не только как параметры функций, но и как возвращаемые значения. Возвращаемый объект можно присвоить другому объекту или вызвать его методы или члены непосредственно.
Глава 2 – Реализация класса
Создаваемый нами класс будет называться Url_nav представлять собой массив и переменную:
$link_and_text_list – массив ссылок, в котором будут храниться адреса ссылок и текст к ним.
$delitmer – разделитель ссылок.
Для успешной работы класса нам понадобятся три метода:
функция, изменяющая стиль посещенных ссылок
функция, изменяющая стиль ссылок при наведении курсора мыши
функция, изменяющая стиль не посещенных ссылок
функция, которая будет добавлять обычную ссылку элемент в массив
функция, которая будет добавлять ссылку-рисунок в массив
функция, создающая горизонтальное меню навигации из массива
функция, создающая вертикальное меню навигации из массива
функция создающая заголовок
Опишем каждый метод класса более подробно.
2.1 Функция l_visited_style (изменение стиля посещенных ссылок)
При вызове функции пользователю надо будет ввести четыре параметра:
$color – цвет ссылок
$t_decor – оформление ссылок (например подчеркивание)
$f_size – размер шрифта ссылок
$f_font – название шрифта ссылок
Реализация функции на языке PHP будет иметь следующий вид:
function l_visited_style($color, $t_decor, $f_size, $f_font)
{
echo('<STYLE type="text/css"> A:visited');
echo("{");
if ($color!="")
{
echo("color: ");
echo($color);
echo(";");
}
else
{
echo('color: #5f0000;');
}
if ($t_decor!="")
{
echo('text-decoration: ');
echo($t_decor);
echo(';');
}
else
{
echo('text-decoration: none;');
}
if ($f_size!="")
{
echo('font-size: ');
echo($f_size);
echo('pt;');
}
else
{
echo('font-size: 12pt;');
}
if ($f_font!="")
{
echo('font-family: ');
echo($f_font);
echo(';}');
}
else
{
echo('font-family: Arial;');
}
echo("}</STYLE>");
}
2.2 Функция l_hover_style (изменение стиля ссылок при наведении)
При вызове функции пользователю надо будет ввести четыре параметра:
$color – цвет ссылок
$t_decor – оформление ссылок (например подчеркивание)
$f_size – размер шрифта ссылок
$f_font – название шрифта ссылок
Реализация функции на языке PHP будет иметь следующий вид:
function l_hover_style($color, $t_decor, $f_size, $f_font)
{
echo('<STYLE type="text/css"> A:hover');
echo("{");
if ($color!="")
{
echo("color: ");
echo($color);
echo(";");
}
else
{
echo('color: #000000;');
}
if ($t_decor!="")
{
echo('text-decoration: ');
echo($t_decor);
echo(';');
}
else
{
echo('text-decoration: blink, underline;');
}
if ($f_size!="")
{
echo('font-size: ');
echo($f_size);
echo('pt;');
}
else
{
echo('font-size: 12pt;');
}
if ($f_font!="")
{
echo('font-family: ');
echo($f_font);
echo(';}');
}
else
{
echo('font-family: Arial;');
}
echo("}</STYLE>");
}
2.3 Функция l_link_style (изменение стиля не посещенных ссылок)
При вызове функции пользователю надо будет ввести четыре параметра:
$color – цвет ссылок
$t_decor – оформление ссылок (например подчеркивание)
$f_size – размер шрифта ссылок
$f_font – название шрифта ссылок
Реализация функции на языке PHP будет иметь следующий вид:
function l_link_style($color, $t_decor, $f_size, $f_font)
{
echo('<STYLE type="text/css"> A:link');
echo("{");
if ($color!="")
{
echo("color: ");
echo($color);
echo(";");
}
else
{
echo('color: #5f0000;');
}
if ($t_decor!="")
{
echo('text-decoration: ');
echo($t_decor);
echo(';');
}
else
{
echo('text-decoration: none;');
}
if ($f_size!="")
{
echo('font-size: ');
echo($f_size);
echo('pt;');
}
else
{
echo('font-size: 12pt;');
}
if ($f_font!="")
{
echo('font-family: ');
echo($f_font);
echo(';}');
}
else
{
echo('font-family: Arial;');
}
echo("}</STYLE>");
}
2.4 Функция add_item (добавляет элемент в массив)
При вызове данной функции пользователю надо будет ввести два параметра:
$title – отображаемый текст ссылки
$s_url – адрес, на который указывает ссылка
Таким образом, всю функцию можно описать следующей последовательностью действий:
определение конца массива
добавление в массив переменной $title
добавление в массив переменной $s_url
После перевода алгоритма на язык PHP получим следующую функцию:
function add_item($title, $s_url)
{
$n=sizeof($this->link_and_text_list);
$this->link_and_text_list[$n]['title']=trim($title);
$this->link_and_text_list[$n]['url']=trim($s_url);
}
2.5 Функция add_img_item (добавляет ссылку-рисунок в массив)
При вызове данной функции пользователю надо будет ввести три параметра:
$title – альтернативный текст
$s_url – адрес, на который указывает ссылка
$image – путь к рисун
Таким образом, всю функцию можно описать следующей последовательностью действий:
определение конца массива
добавление в массив тега img с путем к рисунку заданным переменной $image и альтернативным текстом из переменной $title
добавление в массив переменной $s_url
После перевода алгоритма на язык PHP получим следующую функцию:
function add_img_item($title, $s_url, $image)
{
$n=sizeof($this->link_and_text_list);
if ($image!="")
{
$this->link_and_text_list[$n]['title']="<img SRC=".trim($image)." BORDER=0 ALT='".trim($title)."'>";
}
$this->link_and_text_list[$n]['url'].=" ".trim($s_url);
}
2.6 Функция gor_nav_create (создает горизонтальное меню навигации из массива)
Функция должна последовательно выводить все ссылки, введенные ранее в массив $link_and_text_list, через разделитель заданный в переменной $delitmer.
Реализация функции на языке PHP будет иметь следующий вид:
function gor_nav_create()
{
$links_arr=$this->link_and_text_list;
$str = "";
$c=sizeof($links_arr);
for ($i=0; $i<$c; $i++)
{
if (!$links_arr[$i]['url'])
{
$str .= $links_arr[$i]['title'];
} else {
$str .= "<a href=\"".$links_arr[$i]['url']."\" target=\"_self\">".$links_arr[$i]['title']."</a>";
}
if ($i<$c-1)
{
$str .= $this->delitmer;
}
}
return $str;
}
2.7 Функция vert_nav_create (создает вертикальное меню навигации из массива)
Функция должна последовательно выводить все ссылки, введенные ранее в массив $link_and_text_list с переходом на следующую строк
Реализация функции на языке PHP будет иметь следующий вид:
function vert_nav_create()
{
$links_arr=$this->link_and_text_list;
$str = "";
$c=sizeof($links_arr);
for ($i=0; $i<$c; $i++)
{
if (!$links_arr[$i]['url'])
{
$str .= $links_arr[$i]['title'];
} else {
$str .= "<a href=\"".$links_arr[$i]['url']."\" target=\"_self\">".$links_arr[$i]['title']."</a>"."<BR>";
}
}
return $str;
}
2.8 Функция title_create() (создает заголовок страницы)
Данная функция будет выводить в заголовок страницы часть массива, содержащую текст из ссылок (через разделитель).
Реализация функции на языке PHP будет иметь следующий вид:
function title_create()
{
$links_arr = array_reverse($this->link_and_text_list);
$str = "";
$c = sizeof($links_arr);
for ($i=0; $i<$c; $i++)
{
$str .= $links_arr[$i]['title'];
if ($i<$c-1)
{
$str .= $this->delitmer;
}
}
return "<title>".$str."</title>";
}
}
2.9 Пример использования
Для того чтобы проиллюстрировать использование созданного нами класса введем следующий код PHP (результат его выполнения показан на Рис. 1) :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>ReFolder - О проекте</TITLE>
</HEAD>
<BODY bgcolor="#FFFFFF" text="#000000">
<TABLE BORDER=0 WIDTH=100% HEIGHT=100%>
<TR>
<TD WIDTH=300 HEIGHT=90>
<td>
<?php
$nav = new Url_nav(); // создание нового экземпляра класса
$nav -> l_visited_style("","","","");//изменение стиля посещенных ссылок
$nav -> l_hover_style("","","","");//изменение стиля ссылок при наведении
$nav -> l_link_style("","","","");// изменение стиля непосещенных ссылок
$nav -> delitmer = " < "; // установка разделителя
$nav -> add_item("О проекте", "index.htm");
$nav -> add_item("Рефераты", "referats.htm"); // добавление элементов
$nav -> add_item("Библиотека", "bibl.htm");
$nav -> add_item("Решения и ответы", "otveti.htm");
$nav -> add_item("Программы", "program.htm");
$nav -> delitmer = " > "; // изменение разделителя
echo $nav -> gor_nav_create(); // создание и вывод панели навигации со ссылками
echo("</TD>
</TR>
<TR>
<TD WIDTH=300 VALIGN='top'>
<img SRC = 'MenuLine.jpg'><BR>");
$nav2 = new Url_nav();
$nav2 = new Url_nav(); // создание нового экземпляра класса
$nav2 -> l_visited_style("","","","");//изменение стиля посещенных ссылок
$nav2 -> l_hover_style("","","","");//изменение стиля ссылок при наведении
$nav2 -> l_link_style("","","","");// изменение стиля непосещенных ссылок
$nav2 -> add_item("Бесплатное хранение файлов", "http://refolder.ifolder.ru");
$nav2 -> add_item("Заказать работу", "work.htm"); // добавление элементов
$nav2 -> add_item("Письмо разработчикам", "opinion.htm");
$nav2 -> add_item("Карта сайта", "karta.htm");
$nav2 -> add_img_item("Разделитель", "MenuLine.jpg", "MenuLine.jpg");
echo $nav2 -> vert_nav_create();
?>
</TD>
<td>
На этом сайте вы сможете найти большую коллекцию книг, рефератов,а так же выполненных работ по различным предметам.<BR>
Так же здесь хранится база ответов на некоторые курсы Intuit.ru<BR>
Теперь немного о том как работает сайт. На сайте храняться два типа ссылок:
<OL>
<LI>Ссылки с пометкой [iFolder] - указывают на файлы хранящиеся на сайте файлового хостинга <A HREF="http://refolder.ifolder.ru/">refolder.ifolder.ru</A>
(почему именно он? Прежде всего потому что он один из немногих серверов поддерживающих программы для закачки, что на наш взгляд крайне удобно)</LI>
<LI>Ссылки с пометкой [ed2k] - указывают на версию файла хранящуюся в сети eDonkey2000. Чтобы скачать подобные ссылки рекомендуем установить программу
eMule (ее можно <A HREF="http://www.emule-project.net/">скачать с официального сайта</A> или воспользоваться вот этой <A HREF="http://refolder.ifolder.ru/6437769">ссылкой [iFolder]</A>). О том как пользоваться программой eMule можно прочитать <A HREF="rukovodstvo_eMule.zip">здесь.</A>
</LI>
</OL>
</P>
<b>P.S. Все материалы размещенные на данном сайте носят исключительно ознакомительный характер и должны быть удалены после просмотра.</b>
</TD>
</TR>
<TR>
<TD>
</TD><td>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>
Рис. 1 – Результат выполнения кода
Заключение
Разработанный класс позволяет значительно упростить создание меню навигации сайта. Он сводит всю разработку к заданию элементов массива, разделителя и вызову методов класса.
Класс позволяет выводить меню навигации, как в виде строки, так и в виде столбца. Что еще больше расширяет функциональные возможности класса.
Таким образом можно сделать вывод о том, что поставленная задача была выполнена полностью. И ее итогом стал вполне жизнеспособный программный продукт, способный получить широкое применение у специалистов занимающихся разработкой Web – сайтов на языке PHP.
Список литературы
Кузнецов М.В., Симдянов И.В. Самоучитель PHP. – 2-е изд., перераб. и доп. – СПб.: БХВ-Петербург, 2006.
Уильман Л., Основы программирования на PHP: Пер с анг. –М.: ДМК Пресс, 2001.
Фленов М.Е., PHP Глазами хакера. – СПб.: БХВ-Петербург, 2005.
Кухарчик А., PHP: Обучение на примерах. – Мн.: Новое издание, 2004.