#8. 1 php ООП: Классы и объекты (черновик)

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

Каждый тип данных характеризуется множеством допустимых значений и множеством операций над этим типом. Например, тип double описывает вещественные числа, и для этого типа определен ряд математических операторов и функций. Другие функции, такие как strlen() (вычисление длины строки), substr() (выделение подстроки) определены для типа string, описавающего строки, и не подходят для чисел.

Класс объединяет данные и операции над данными на уровне кода. Для создания нового класса используется ключевое слово class. Все переменные и функции класса объединяются в один логический блок с помощью фигурных скобок. Например, остутствует встроенный тип данных для комплексных чисел.

Комплексное число представляет собой просто пару обычных вещественных чисел, например, (3, 5). Число 3 называется вещественной частью, а число 5— мнимой частью комплексного числа (3,5). Сложение комплексных чисел осуществляется по правилу: (a, b) + (c, d) = (a+c, b + d)

Опишем соответствующий класс.

Пример 1. Описание класса комплексных чисел

<?php
class MathComplex
{
    public $re;
    public $im;

    public function add($re, $im)
    {
        $this->re += $re;
        $this->im += $im;
    }
}
?>

Здесь $re и $im являются свойствами класса MathComplex, соответствующими вещественной и мнимой части комплексного числа. Их значения различны для разных чисел.

Функция add является методом класса, предназначенным для сложения чисел. Методы класса являются общими для всех значений данного типа.

Ключевое слово public является модификатором доступа и означает, что все свойства и методы описанного класса доступны в любом месте программы.

Создание значений пользовательского типа осуществляется с помощью ключевого слова new и имени класса. Например, оператор

new MathComplex;

выделяет место в памяти и помещает туда некоторое значение (объект класса MathComplex). Объект, подобно значению любого типа можно присвоить какой-нибудь переменной, напрмер, $obj:

$obj = new MathComplex;

После выполнения данной строки создан новый объект, который присвоен переменной $obj. Но значения его свойств re и im на данном этапе не определены. Для доступа к членам класса используется оператор ->. При этом знак $ перед именем свойства не пишется:

$obj->re = 3;
$obj->im = 5;

Таким образом, мы определили комплексное число (3, 5).

Имеется следующее ограничение. В отличие, например, от C++, PHP не позволяет переопределять стандартные операторы. Например, мы описали класс MathComplex, описывающий комплексные числа, и создали пару объектов x и y этого класса. Ограничение состоит в том, что мы не сможем, например, сложить их так, как мы привыкли складывать числа:

x + y.

Вместо этого придется описать соответствующий метод класса, например, add(), в который мы передадим второе слагаемое. То есть на PHP сложение x + y объектов x и y, описывающих числа, будет выглядеть как-то так: x->add(y).