ТОП-10 популярных



Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...


Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...

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


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

PHP. Классы и объекты. Часть Шестая.


28-12-2009

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"); ?>

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
PHP. Классы и объекты. Часть Пятая. PHP. Классы и объекты. Часть Седьмая.