Создание нового класса

Лабораторная работа №5. Объекты и классы в PHP

Класс как тип данных

До сих пор в программах мы оперировали переменными, хранящими значения определенного типа. В основном использовались типы string (строка) и douЫe (вещественное число), реже- array (ассоциативный массив). Для работы с такими переменными существует целый ряд операций: арифметические - для чисел; strlen (), substr () и т. д. - для строк; count (), array _merge () и др. - для массивов. ООП позволяет нам вводить новые типы данных в дополнение к уже существующим.

Мы видим, что с каждой переменной (а точнее, с каждым типом данных) логически связаны данные двух видов: во-первых, это некоторый набор битов, представляющий само значение переменных, а во-вторых, набор функций и операторов, предназначенных для обработки этих битов. Легко видеть, что любой тип всегда может быть полностью описан в терминах данных и операций над ними.

Ключевым понятием ООП является класс. Класс можно рассматривать как тип некоторой переменной в том понимании, которое было описано в предыдущем абзаце.

Переменная класса (далее будем ее называть объектом класса) обычно имеет набор свойств (значений различных типов) и операций (или методов, функций), которые могут быть с ним проведены. Свойства и методы класса часто называют его членами.

Рис. 1. Переменные объявляются при помощи типа, объекты - при помощи класса

Так же как может существовать много переменных одного и того же типа (например, строкового), не связанных между собой, возможно и наличие в программе множества объектов одного и того же класса, различающихся своими свойствами.

Например, мы можем рассматривать тип int как класс. Тогда переменная этого "класса" будет обладать одним-единственным свойством (ее целым значением), а также набором методов (сложение, вычитание, инкремент и т. д.). При этом методы выглядят как арифметические операторы+,-,++ и т. д.

В языке С++ мы могли бы, действительно, объявить новый тип int именно таким образом. Однако в РНР дело обстоит немного хуже: мы не имеем права переопределять стандартные операции (сложение, вычитание и т. д.) для объектов. Например, если бы мы захотели добавить в язык комплексные числа, в С++ это можно было сделать без особых затруднений (и класс комплексных чисел по использованию практически не отличался бы от встроенного типа int), однако в РНР нам такое добавление не удастся.

Альтернативное решение состоит в том, чтобы везде вместо + и других операций использовать вызовы соответствующих функций, например, add (), которые бы являлись методами класса. Собственно, только такой способ организации методов и поддерживается в РНР (а также в Java).

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

Создание нового класса

Новый класс (тип данных) в программе описывается при помощи ключевого слова class. Внутри класса могут располагаться его свойства (переменные класса) и методы (функции-члены класса).

Давайте для тренировки опишем класс с именем мathComplex, объекты которого будут хранить комплексные числа (листинг 1). Этот класс пока поддерживает только сложение и вычитание чисел.

ПРИМЕЧАНИЕ

В математике комплексным числом называют пару двух вещественных чисел, первое из которых условно называют "действительной частью", а второе - "мнимой частью" комплексного числа. Все действительные числа соответствуют комплексным величинам с мнимой частью, равной нулю. Квадратный корень из -1, не существующий в виде действительного числа, имеет комплексное значение (0, 1), которое еще иногда обозначают знаком i. С комплексными числами можно выполнять все те же операции, что и с действительными - складывать, умножать, делить и т. д.

Листинг 1. Пример класс. Файл Math/Complex.php

Как видно из листинга 1, для объявления членов класса $re и $im мы воспользовались модификатором public, который более подробно будет освещен в следующих темах. "Добраться" до членов класса можно при помощи специальной переменной $this, которая всегда существует внутри методов (функций-членов) класса.

Файл, приведенный в листинге 1, при своем включении не выполняет никаких действий. Его задача - добавить в программу новый класс с именем мathComplex. В один файл можно добавлять множество классов, однако для облегчения поиска классов принято придерживаться рекомендации: один файл - один класс.

Работа с классами

Предположим, что в программе каким-то образом уже описан некоторый класс. Так как класс - это, по сути, тип данных, мы должны иметь некоторый механизм для создания переменных, хранящих значение этого типа.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: