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

Посмотрите еще раз на листинг 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

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


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



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