Пример: счетчик объектов

Давайте рассмотрим пример класса, который "считает", сколько его экземпляров (объектов) существует в текущий момент, и позволяет получить эту информацию из вызывающей программы (листинг 1).

Листинг 1 Использование статических членов класса. Файл static.php

ВНИМАНИЕ!

Взгляните еще раз на конструктор класса: в нем мы используем команду self::$count++, а не $this->count++. Как уже говорилось выше, статическое свойство принадлежат не объекту, а самому классу, поэтому в $this, представляющем данные объекта, его попросту нет. Тем не менее обращение $this->count++ не порождает ошибку во время выполнения программы! Будьте внимательны.

Пример: кэш ресурсов

Выше мы рассматривали класс FileLogger, который позволяет добавлять сообщения в lоg-файлы. Однако, наверное, не очень хорошо создавать несколько объектов для одного и того же физического файла. Хотелось бы сделать так, чтобы при указании одинаковых имен файлов система не создавала новые объекты, а просто возвращала уже существующие. Такой подход называется кэшированием ресурса по идентификатору (в качестве ресурса тут выступает файл, а в качестве его идентификатора - имя файла). Пример - в листинге 2.

Листинг 2 Локальное кеширование ресурса. Файл cache.php

Заметив, что времена создания переменных совпадают, мы и убеждаемся, что в действительности $logger1 и $ logger2 - ссылки на один и тот же объект.

Обратите внимание, что для запрета прямого создания объектов FileLogger мы использовали закрытый конструктор. Это гарантирует, что массив FileLogger::$loggers будет всегда содержать актуальные значения, которые "не испортятся" в результате действий сторонней программы.

Константы класса

Наряду с членами классы могут содержать константы, которые определяются при помощи ключевого слова const. В листинге 3 приводится пример класса cls, включающего в свой состав константу NАМЕ, которая содержит имя класса.

Листинг 3. Использование констант к классах. Файл const.php

Точно так же, как и в случае со статическими членами классов, к константам нельзя обращаться при помощи оператора->; для обращения используется оператор разрешения области видимости:: который предваряется либо именем класса. либо ключевым словом self.

Существование констант может быть проверено при помощи функции defined(), которая возвращает true, если константа существует, и false в противном случае (листинг 4).

Листинг 3 Проверка существования констант класса. Файл defined.php

АМЕЧАННИЕ

При проверке классовых констант следует в обязательном порядке использовать оператор разрешения области видимости:: и имя класса.


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



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