Библиотека Интернет Индустрии I2R.ru |
|||
|
ООП на PHP (Продолжение)Продолжение введения в объектно-ориентированное программирование на PHP. В этой статье рассказывается, что такое класс, что такое свойства и методы класса, что такое конструктор и инкапсуляция. Все это в контексте реального примера - нашего любимого прямоугольника. Объектно-ориентированная версия калькулятораКак я уже говорил, цель ООП связать вместе данные (в данном случае это переменные высоты и ширины) и код, который работает с этими переменными (наши две функции для вычисления периметра и площади). Давайте изменим файл rect.php так, чтобы вместо двух отдельных функций он содержал класс, с помощью которого мы сможем создавать объекты "прямоугольник".
Давайте подробно разберем этот код от начала до конца. Мы начали с того, что определили класс, который называется Rectangle.
По соглашению имена классов должны начинаться с большой буквы. Конечно, это не является обязательным, но если соблюдать соглашения, другим разработчикам разбираться в коде будет легче. Затем мы объявляем две переменные $width и $height.
Однако, это не совсем обычные переменные! Так как они описаны внутри определения класса, мы на самом деле объявили переменные, которые будут присутствовать в каждом объекте (экземпляре) этого класса. Не забывайте, мы как бы делаем схему, по которой будут конструироваться объекты "прямоугольник". Проще говоря, мы говорим PHP, что каждый прямоугольник должен иметь ширину и высоту. В ООП переменные, которые принадлежат объекту, называются свойствами, так что мы задали два свойства объекта Rectangle. Перейдем к функциям.
Как и переменные, функции, объявленные внутри определения класса, будут принадлежать каждому экземпляру класса. А вот эта функция особенная, потому что ее имя совпадает с названием класса (Rectangle). Такая функция называется конструктором, и она вызывается, когда создается экземпляр объекта (скоро мы до этого дойдем). Конструктор несет ответственность за определение создаваемого экземпляра объекта, так чтобы он был готов к использованию. В нашем случае для класса Rectangle мы должны определить значения для двух свойств: высоты и ширины. Как видно выше, конструктор имеет два параметра $width и $height. Давайте посмотрим, как конструктор назначает значения этих параметров соответствующим свойствам объекта:
Внутри любой функции, являющейся частью определения класса, специальная переменная $this ссылается на объект, к которому эта функция принадлежит. Так что в приведенном выше куске кода переменная $this дословно обозначает "этот объект Rectangle". Оператор в виде стрелочки (->) на первый взгляд может показаться странным и непонятным, но в действительности он очень простой. Он используется для доступа к переменным и функциям, принадлежащих объекту. В коде выражение $this->width ссылается на переменную $width, которую мы объявили вначале класса, то есть на свойство width объекта Rectangle. Точно так же $this->height ссылается на свойство height объекта Rectangle. Чуть позже мы рассмотрим, как с помощью конструктора создать новый объект Rectangle с заданными значениями ширины и высоты, а пока давайте определим функции для вычисления площади и периметра.
Они очень похожи на функции rect_area и rect_perim, которые мы использовали в предыдущем разделе, но обратите внимание, что в эти функции не надо передавать параметров ширины/высоты. Как и переменные ($width и $height) объявленные выше, эти функции принадлежать каждому экземпляру класса (объекту). Если мы создадим три различных объекта Rectangle, каждый из них будет иметь свои собственные функции area и perimeter. Функции, которые принадлежат объекту, называются методами. Теперь вам должно быть понятно, почему функции area и perimeter не нуждаются в передаваемых значениях. Работа этих функций заключается не в том, чтобы вычислять площадь и периметр любого прямоугольника, а в том, чтобы вычислять эти свойства только для "родного" прямоугольника! Если вы более пристально посмотрите на эти функции, вы заметите, что они используют $this->width и $this->height как переменные ширины и высоты. Мы используем $this в смысле "объект к которому я принадлежу". Чтобы увидеть, каким образом все элементы созданного класса взаимодействуют друг с другом для создания нового объекта, давайте перепишем domyhomework.php с использованием нашего нового объектно-ориентированного подхода. Калькулятор прямоугольниковПеред тем как углубиться в создание калькулятора, нам надо знать, как создаются объекты класса. А создаются они так:
Ключевое слово new говорит PHP, что надо создать новый объект. А выражение new Rectangle говорит PHP, что надо создать экземпляр класса Rectangle. Помните, нашему конструктору надо передавать два параметра - ширину и высоту создаваемого прямоугольника, так что мы должны задать эти значения вместо слов width и height. Допустим, мы хотим создать прямоугольник с шириной 10, высотой 20 и поместить его в переменную $myRectangle. Код для этого будет следующий:
Мы можем поменять ширину прямоугольника:
А затем вывести значение площади на экран:
Более того, мы можем создать два прямоугольника и работать с ними:
Мы узнали, как создавать объект Rectangle и работать как работать с ним, так что мы может переписать наш скрипт domyhomework.php.
Видите, каким элегантным стал код? Мы создаем прямоугольник с заданной шириной и высотой, а затем с помощью объекта выясняем все интересующие нас детали. Все что нам надо для определения площади и периметра - это вызвать нужные методы. Это свойство объектно-ориентированного программирования, когда функциональность скрывается внутри объекта, так что разработчику, который использует объект, не нужно знать как это все работает, называется инкапсуляцией. Если вам хочется узнать больше об ООП, сходите на http://www.php.net/manual/en/language.oop.php. |
|
2000-2008 г. Все авторские права соблюдены. |
|