6.7. Статические элементы класса
Статические элементы класса отличаются от обычных элементов класса и имеют отношение к самому классу, а не к экземплярам его объекта. Они используются для реализации функциональности и данных, которые должен содержать класс, но не принадлежат ни одному конкретному объекту. Как и в случае с обычными элементами классов, существуют как статические методы, так и статические свойства.
Статические свойства содержат данные, инкапсулируемые в класс, которые разделяются между всеми экземплярами класса. В частности, статические свойства класса очень похожи на глобальные переменные за исключением того, что они принадлежат определенному классу и могут иметь ограничение по доступу.
В листинге 6.3 уже приводилось статическое свойство Counter::$count, которое принадлежит классу Counter и не может принадлежать любому экземпляру класса Counter. При обращении к нему нельзя пользоваться методом this, но можно пользоваться методом self или любым другим допустимым выражением определения пространства имен. В листинге 6.3 метод getCount возвращает self::$count, но вместо него можно использовать Counter::$count.
Статические методы реализуют функциональность, которая будет инкапсулирована в класс, но не будет иметь отношения ни к одному конкретному объекту. Во многом подобно тому, как статические свойства аналогичны глобальным переменным, статические методы аналогичны глобальным функциям. Независимо от ограничений доступа статические методы имеют полный доступ к свойствам класса, к которому они принадлежат, и к экземплярам этого класса.
В листинге 6.3 метод getCount является обычным методом, который вызывается оператором ->. PHP создает переменную this, хотя тело метода им воспользоваться не может. Однако, во многом подобно тому, как это делает сам count, метод getCount не принадлежит ни к одному конкретному объекту. В определенных ситуациях они могут потребоваться и без указания экземпляра объекта, и в таком случае очень хорошо подходят статические методы. Язык PHP не создает this внутри статических методов, даже если они были вызваны из объекта.
Листинг 6.7 отличается от листинга 6.3 тем, что в нем getCount является статическим методом. Ключевое слово static не предотвращает вызова getCount из экземпляра с помощью оператора ->, но PHP не создает this внутри такого метода. Пользуясь соответствующим синтаксисом, можно попытаться статически вызвать любой метод. Если метод использует this, PHP генерирует ошибку.
Метод можно создать таким образом, чтобы он работал по-разному в зависимости от того, был он вызван статически или нет. Для этого необходимо протестировать установку this. Конечно, при использовании ключевого слова static метод всегда будет статическим, независимо от того, как он был вызван.
Классы также могут задавать постоянные свойства. Вместо использования конструкции public static для этих целей используется ключевое слово const. Ссылаться на постоянные свойства можно только статически. Это свойства класса, а не объекты, являющиеся экземплярами класса.
Листинг 6.7. Статические элементы
<?php
class Counter {
private static $count = 0; const VERSION = 2.0; function __construct()
self::$count++; function __destruct()
self::$count-- ; static function getCount()
return self::$count;
};
//создать один экземпляр $c = new Counter(); //печатать 1
print(Counter::getCount() . "<br>n"); // распечатать версию класса
print("Используется версия: " . Counter::VERSION . br>n"); ?>
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Классы и объекты. Часть Шестая.
28-12-2009
<< Предыдущая статья | Следующая статья >> |
PHP. Классы и объекты. Часть Пятая. | PHP. Классы и объекты. Часть Седьмая. |