ресурс для начинающих веб-разработчиков
комплексные веб-услуги по созданию сайтов

Справочный материал по основным языкам программирования и верстки сайтов.

Готовая методика создания простых и сложных динамичных сайтов, с использованием PHP и MySQL.

Использование веб-редактора Adobe Dreamweaver в разработке сайтов.

Использование графических редакторов Adobe Flash, Adobe Photoshop, Adobe Fireworks в подготовке веб-графики.

Разработка веб-сайтов под "ключ".

Разработка отдельных фрагментов сайтов, консультации по вопросам верстки веб-страниц и веб-программирования.

Реализация интерфейсов. Проектирование классов

Реализация интерфейсов

Реализация интерфейсов

В РНР5 появилось понятие интерфейса. Интерфейс рассматривается как искусственная замена множественного наследования и подобен концепции интерфейсов, которая поддерживается в других объектно-ориентированных языках.

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

interfase Displayable

{

function display ();

}

class webPage implements Displayable

{

functiom display ()

{

// ...

}

}

Этот пример демонстрирует обходной путь реализации множественного наследования, поскольку класс webPage может быть унаследован от одного класса и реализовать один или более интерфейсов.

Если не реализововать методы, указанные в интерфейсе (в данном случае display), генерируется фатальная ошибка.

Проектирование классов

Теперь, когда вы познакомились с концепциями, лежащими в основе объектов и классов, и с синтаксисом их реализации в РНР, пора рассмотреть способы разработки полезных классов.

Многие классы в программе будут представлять классы или категории объектов реального мира. Классы, которые, возможно, будут использоваться при разработке веб-приложений, могут включать страницы, компоненты пользовательского интерфейса, покупательскую тележку, обработку ошибок, категории товаров или клиентов.

Объекты в программе могут также представлять специфичные экземпляры ранее упомянутых классов — например, начальную страницу, конкретную кнопку или покупательскую тележку, находящуюся в пользовании у конкретного покупателя в определенный промежуток времени. Сам покупатель может быть представлен объектом типа клиент. Каждый товар, приобретаемый покупателем, может представляться объектом, принадлежащим к определенной категории или классу.

Мы уже рассматривали простые включаемые файлы для придания единообразного вида различным страницам веб-сайта вымышленной компании АВС. Используя классы и воспользовавшись возможностью сэкономить время, которое обеспечивает наследование, можно создать более совершенную версию этого же сайта.

Мы хотим иметь возможность быстро создавать страницы для сайта компании АВС, которые сохранят единый стиль оформления и ведут себя одинаково. В то же время страницы должно быть без труда изменять, приводя их в соответствие различным частям сайта.

Для целей данного примера мы создадим кламм Page. Основное назначение класса — ограничить объем HTML-кода, требуемого для создания новой страницы. Он должен допускать модификацию тех частей страниц, которые изменяются от страницы к странице, и обеспечивают автоматическую генерацию тех фрагментов, которые остаются неизменными на каждой странице.

Класс должен представлять гибкую структуру для построения новых страниц, но при этом не должен ограничивать нам свободу действий.

Роскольку мы генерируем страницу с помощью сценария, а не статического HTML, мы можем воспользоваться любым количеством полезных средств, в том числе новыми функциональными возможностями, которые позволяют нам выполнять следующие действия:

  • Изменять элементы страницы только в одном месте. Например, если мы вносим изменения в примечания относительно авторских прав или добавляем дополнительную кнопку, мы должны вносить соответствующие изменения только в каком-то одном месте.
  • Иметь содержимое по умолчанию для большей части страницы и при этом иметь возможность при необходимости менять любой элемент, устанавливая пользовательские значения для таких элементов, как, например, заголовок и метадескрипторы.
  • Распозновать, какая страница просматривается, и менять соответствующим образом значения навигационных элементов, например, нет смысла устанавливать на домашней странице кнопку, щедчок на которой вызывает переход на туже домашнюю страницу.
  • Замещать стандартные элементы на конкретных страницах. Например, если в определенных разделах сайта требуются другие навигационные кнопки, мы должны иметь возможность замещать ими стандартные кнопки.