#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
- 1200 reads
mariyas
Sun, 09/17/2023 - 19:02
Permalink
добавлено: константы
добавлено: константы