На главную

Библиотека Интернет Индустрии I2R.ru

Rambler's Top100

Малобюджетные сайты...

Продвижение веб-сайта...

Контент и авторское право...

Забобрить эту страницу! Забобрить! Блог Библиотека Сайтостроительства на toodoo
  Поиск:   
Рассылки для занятых...»
I2R » Сайтостроительство » Web-программирование

ООП на PHP (Продолжение)

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

Объектно-ориентированная версия калькулятора

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

<?php
class Rectangle
{
var $width;
var $height;
function Rectangle($width, $height)
{
$this->width = $width;
$this->height = $height;
}
function area()
{
return $this->width * $this->height;
}
function perimeter()
{
return ($this->width + $this->height) * 2;
}
}
?>

Давайте подробно разберем этот код от начала до конца. Мы начали с того, что определили класс, который называется Rectangle.

class Rectangle
{

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

Затем мы объявляем две переменные $width и $height.

var $width;
var $height;

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

Перейдем к функциям.

function Rectangle($width, $height)
{

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

Конструктор несет ответственность за определение создаваемого экземпляра объекта, так чтобы он был готов к использованию. В нашем случае для класса Rectangle мы должны определить значения для двух свойств: высоты и ширины. Как видно выше, конструктор имеет два параметра $width и $height. Давайте посмотрим, как конструктор назначает значения этих параметров соответствующим свойствам объекта:

$this->width = $width;
$this->height = $height;
}

Внутри любой функции, являющейся частью определения класса, специальная переменная $this ссылается на объект, к которому эта функция принадлежит. Так что в приведенном выше куске кода переменная $this дословно обозначает "этот объект Rectangle".

Оператор в виде стрелочки (->) на первый взгляд может показаться странным и непонятным, но в действительности он очень простой. Он используется для доступа к переменным и функциям, принадлежащих объекту. В коде выражение $this->width ссылается на переменную $width, которую мы объявили вначале класса, то есть на свойство width объекта Rectangle. Точно так же $this->height ссылается на свойство height объекта Rectangle.

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

function area()
{
return $this->width * $this->height;
}
function perimeter()
{
return ($this->width + $this->height) * 2;
}
}

Они очень похожи на функции rect_area и rect_perim, которые мы использовали в предыдущем разделе, но обратите внимание, что в эти функции не надо передавать параметров ширины/высоты. Как и переменные ($width и $height) объявленные выше, эти функции принадлежать каждому экземпляру класса (объекту). Если мы создадим три различных объекта Rectangle, каждый из них будет иметь свои собственные функции area и perimeter. Функции, которые принадлежат объекту, называются методами.

Теперь вам должно быть понятно, почему функции area и perimeter не нуждаются в передаваемых значениях. Работа этих функций заключается не в том, чтобы вычислять площадь и периметр любого прямоугольника, а в том, чтобы вычислять эти свойства только для "родного" прямоугольника!

Если вы более пристально посмотрите на эти функции, вы заметите, что они используют $this->width и $this->height как переменные ширины и высоты. Мы используем $this в смысле "объект к которому я принадлежу".

Чтобы увидеть, каким образом все элементы созданного класса взаимодействуют друг с другом для создания нового объекта, давайте перепишем domyhomework.php с использованием нашего нового объектно-ориентированного подхода.

Калькулятор прямоугольников

Перед тем как углубиться в создание калькулятора, нам надо знать, как создаются объекты класса. А создаются они так:

new Rectangle(width, height)

Ключевое слово new говорит PHP, что надо создать новый объект. А выражение new Rectangle говорит PHP, что надо создать экземпляр класса Rectangle. Помните, нашему конструктору надо передавать два параметра - ширину и высоту создаваемого прямоугольника, так что мы должны задать эти значения вместо слов width и height. Допустим, мы хотим создать прямоугольник с шириной 10, высотой 20 и поместить его в переменную $myRectangle. Код для этого будет следующий:

$myRectangle = new Rectangle(10,20);

Мы можем поменять ширину прямоугольника:

$myRectangle->width = 50;

А затем вывести значение площади на экран:

echo $myRectangle->area(); // выведет '1000'


Более того, мы можем создать два прямоугольника и работать с ними:

$rect1 = new Rectangle(10,20);
$rect2 = new Rectangle(30,40);
echo $rect1->area(); // выведет '200'
echo $rect2->perimeter(); // выведет '140'

Мы узнали, как создавать объект Rectangle и работать как работать с ним, так что мы может переписать наш скрипт domyhomework.php.

<?php
require('rect.php'); // загружает класс
$r = new Rectangle($w,$h);
?>
<html>
<body>
<p>Width: <?=$r->width?><br />
Height: <?=$r->height?></p>
<p>Area: <?=$r->area()?><br />
Perimeter: <?=$r->perimeter()?></p>
</body>
</head>

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

Если вам хочется узнать больше об ООП, сходите на http://www.php.net/manual/en/language.oop.php.

<<...первая часть статьи

Автор: Kevin Yank
Перевод: Михаил Дубаков
Web-анатомия

Спонсор раздела

Рассылки Subscribe.ru:

Библиотека сайтостроительства - новости, статьи, обзоры
Дискуссионный лист для web-разработчиков
Подписка на MailList.Ru
Автор: NunDesign
Другие разделы
Оптимизация сайтов
Web-студии
» Новое в разделе
Web-дизайн
Web-программирование
Интернет-реклама
Раскрутка сайта
Web-графика
Flash
Adobe Photoshop
Рассылка
Инструменты вебмастера
Контент для сайта
HTML/DHTML
Управление web-проектами
CSS
I2R-Журналы
I2R Business
I2R Web Creation
I2R Computer
рассылки библиотеки +
И2Р Программы
Всё о Windows
Программирование
Софт
Мир Linux
Галерея Попова
Каталог I2R
Партнеры
Amicus Studio
NunDesign
Горящие путевки, идеи путешествийMegaTIS.Ru

2000-2008 г.   
Все авторские права соблюдены.
Rambler's Top100