#7. 7 php ООП Статические свойства и методы. Константы класса
Primary tabs
Статические свойства и методы
Свойства и методы называют статическими, если для обращения к ним не требуется создавать экземпляр класса (объект), т.е. не требуется вызывать конструктор через new()
:
<?php class Example { public static $property = 2; } echo Example::$property;
Статический член класса объявляется с помощью ключевого слова static
после модификатора доступа. Обращение к статическому свойству $property
класса Example
за пределами класса осуществляется при помощи конструкции Example::$property
. Внутри класса для этого используется ключевое слово self
:
<?php class Example { public static $property= 2; public static function get_property() { return self::$property; } public static function set_property($value) { self::$property = $value; } } echo Example::get_property();
В отличие от обращения к обычному свойству, при обращении к статической переменной перед именем этой переменной ставится знак $
.
Также о статических элементах можно сказать, что:
- Статические свойства и методы определяются не на уровне объекта, а на уровне класса.
- Статические свойства являются общими для всех объектов данного класса:
<?php class Example { public static $property= 2; public static function get_property() { return self::$property; } public static function set_property($value) { self::$property = $value; } } $obj1 = new Example; $obj2 = new Example; $obj1->set_property(0); $obj2->set_property(11); echo $obj1->get_property();
В результате на экран будет выведено число 11.
- Статический метод может работать только со статическими членами (свойствами и другими методами) этого же класса:
<?php class Example { public $a; public static $b; public static function f() { self::b = 0; //всё нормально $this->a = 2; //ошибка. Статический метод может обращаться только к статическим элементам } }
В примере 1 добавлен счетчик зверей в описание класса Animal — статическая переменная $count
. Каджый раз при создании объекта класса Animal
значение счетчика $count
увеличивается на единицу в конструкторе этого объекта, а при удалении объекта и вызове деструктора — уменьшается на единицу. Текущее значение счетчика можем получить при помощи статического метода get_count
.
Пример 1. Статические члены класса
<?php class Animal { private $name; private static $count; public function __construct($text) { $this->name = $text; self::$count++; } public function set_name($text) { $this->name = $text; } public function get_name() { return $this->name; } public static function get_count() { return self::$count; } public function __destruct() { self::$count--; } } $lion = new Animal("Бонифаций"); $elephant = new Animal("Джамбо"); echo "В нашей программе ", Animal::get_count(), " животных.<BR>"; $lion = null; echo "Осталось ", Animal::get_count(), "животное.<BR>";
В этом примере мы создали два объекта класса Animal
, а затем удалили один из объектов путем перезаписи соответствующей переменной. Результатом выполнения примера будут строки
В нашей программе 2 животных.
Осталось 1 животное.
Константы
Помимо обыкновенных и статических свойств, класс в PHP может содержать неизменяемые значения — константы, которые определяются с помощью ключевого слова const
:
<?php class Animal { const NAME = "Animal"; } echo Animal::NAME, "<BR>";
Обратиться к константе, как и к статическому элементу, можно при помощи оператора разрешения области видимости ::
, который предваряется либо именем класса (вне класса), либо ключевым словом self
(внутри класса).
Существование константы можно проверить с помощью функции defined
, которая возвращает true
, если константа существует, и false
в противном случае:
if (defined("Animal::NAME")) { echo "Константа определена<BR>"; } else { echo "Константа не определена<BR>"; }
- Log in to post comments
- 498 reads
mariyas
Sun, 09/17/2023 - 19:02
Permalink
добавлено: константы
добавлено: константы