Создание нескольких объектов — КиберПедия 

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Создание нескольких объектов

2017-09-27 333
Создание нескольких объектов 0.00 из 5.00 0 оценок
Заказать работу

Мы только что передавали методу add () обыкновенное число. Однако, конечно, в качестве параметра функции можно указывать все, что угодно, например объект другого (или того же самого) класса. Листинг 3 иллюстрирует ситуацию. В учебных целях мы создадим еще один класс, MathCornplex1, немного изменив его метод add (). Кроме того, мы добавили еще и метод для получения строкового представления комплексного числа, чтобы не выводить его каждый раз вручную.

Листинг З Пример класса с методом. Файл Math/Complexl.php

Смотрите, мы явно указали перед параметром $у тип MathCornplex1. Это говорит РНР, что мы можем передавать в данную функцию только объекты этого класса, но не другого. Вот как может выглядеть корректное использование данного класса.

Листинг 4 Вызов метода объекта. Файл calll.php

ПРИМЕЧАНИЕ

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

Перегрузка преобразования в строку

Посмотрите еще раз на листинг 3. Возможно, вы спросите: почему мы назвали функцию _tostring() столь длинным именем? И зачем эти неуклюжие символы подчеркивания?

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

Листинг 5 Перегрузка интерполяции. Файл tostring.php

Обратите внимание, что мы вставляем объект $а прямо в строку, и в момент интерполяции переменных РНР вызывает метод __tostring (). Результат будет таким:

Значение: (314, 101)

Если бы не метод __toString () (например, при использовании класса MathComplex, который мы написали в самом начале этой главы), вывод был бы другим:

Catchable fatal error: Object of class MathComplex could not bе converted to string

Как видите, РНР генерирует ошибку, в которой сообщает о невозможности преобразования объекта класса МathComplex в строку.

Инициализация и разрушение

Давайте еще раз взглянем на листинги 4 и 5. Как видите, для корректного создания объекта нам недостаточно просто использовать оператор new: потом приходится еще инициализировать свойства объекта ($re и $im). Конечно, это утомительно, и о присваивании легко случайно позабыть, - в результате будет ошибка. В нашем примере инициализация очень проста, однако в реальной ситуации она может быть, наоборот, весьма объемна (например, если класс требует загрузки каких-нибудь файлов или записей из базы данных).

Конструктор

Давайте взглянем на очередную реализацию нашего класса комплексных чисел (листинг 6).

Листинг 6 Пример класса с конструктором. Файл Math/Complex2.php

Обратите внимание на необычное название метода - _ construct (). Это так называемый конструктор класса. Он вызывается всякий раз, когда вы используете оператор new для объекта.

ПРИМЕЧАНИЕ

В отличие от других языков программирования, в РНР у класса может быть только один конструктор.

Как видите, конструктор принимает два параметра: действительную и вещественную части комплексного числа. Листинг 7 иллюстрирует применение данного класса.

Листинг 7 Использование конструктора. Файл construct.php

Насколько легче стало создание новых объектов! Теперь мы уже при всем желании не сможем пропустить их инициализацию - конструктор будет вызван в любом случае.

Параметры по умолчанию

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

Мы заставим РНР корректно воспринимать следующие четыре команды:

При этом недостающие параметры будут заполнены значениями по умолчанию (в нашем примере это 0).

В примере, который только что был приведен, по умолчанию создается объект класса MathCornplex2 со значением (0, 0). В языках программирования вроде Java и С++ конструктор класса, который допускает создание объектов без указания параметров, называется конструктором по умолчанию.


Поделиться с друзьями:

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.