Отправляет email-рассылки с помощью сервиса Sendsay

PHP 5 для начинающих

  Все выпуски  

Статические свойства и методы


PHP 5 для начинающих

Ключевое слово static использовалось в PHP и раньше применительно к статическим переменным в функциях.

Пример 8.1. Рекурсия

<?php

function recursion()
{
    static $level = 5; 1

    if ($level > 0) {
        print $level--;
        recursion();
    }
}

?>
            
<?php

recursion();

?>
            
54321
1

В отличие от обычных, статическая переменная инициализируется только один раз - при первом вызове функции в объявлении с ключевым словом static. В дальнейшем это объявление игнорируется, а переменная сохраняет свое значение между вызовами функции.


Однако, в PHP 5 это ключевое слово стало возможным применять и по отношению к свойствам и методам класса. В данном контексте оно означает, что статическое свойство или метод принадлежит непосредственно классу, а не его объектам. Как следствие, становится возможным обращаться к этому свойству или методу без создания нового объекта (и, напротив, становится невозможным обращаться к нему обычным способом).

Ключевое слово static употребляется в объявлении сразу после модификатора доступа, регулирующего видимость свойства или метода. Если видимость не указана, то по умолчанию свойство или метод считается публичным, а объявление начинается непосредственно с ключевого слова static.

Если обычные свойства принадлежат объектам, то статические свойства принадлежат всему классу и являются общими для всех его объектов. Рассмотрим это положение более подробно на следующем примере.

Пример 8.2. Класс Cat со статическим свойством

<?php

class Cat
{
    private $name; 1
    public static $numberOfCats = 0; 2

    function __construct($name)
    {
        $this->name = $name; 3
        self::$numberOfCats++; 45
    }

    function __destruct()
    {
        self::$numberOfCats--; 6
    }
}

?>
            
<?php

$neko = new Cat('Neko');
$sindycat = new Cat('Sindycat');

print Cat::numberOfCats; 1

?>
            
2
1

Обычное свойство, принадлежащее объектам класса. У каждого объекта (кота) есть свое имя, отличающее его от остальных.

2

Статическое свойство, принадлежащее всему классу. В данном случе, это свойство является счетчиком и отражает общее число существующих котов. Оно не имеет смысла в контексте отдельно взятого объекта (кота). Более того, если бы это свойство принадлежало объектам, то при появлении нового (либо исчезновении существующего) кота пришлось бы обеспечивать синхронное его изменение у всех имеющихся объектов.

3

Каждый объект отвечает за установку правильного значения своего свойства. Обращение к нему производится посредством псевдопеременной $this, обозначающей данный объект, и разделителя ->.

4

Обращение к статическому свойству класса из методов этого класса производится при помощи выражения self (без символа $ в начале!), которое соответствует текущему классу, и оператора контекста (::).

5 6

Каждый объект может увеличивать и уменьшать значение счетчика (статического свойства класса) на единицу.

1

Доступ к статическому свойству из глобального контекста производится по имени класса, которому оно принадлежит, и оператора контекста (::).


Близкими по своей сущности к статическим свойствам класса являются константы класса. Можно сказать, что константы - это неизменяемые статические свойства класса.

Константы, как своего рода противоположность переменным, существовали и в более ранних версиях PHP (см. Константы). Однако, те константы (доступные, впрочем, и в PHP 5) определялись в глобальном контексте с помощью функции define().

В PHP 5 с помощью специального ключевого слова const могут быть определены константы в контексте класса. Порядок их определения и последующего обращения к ним виден из следующего примера.


Created with DocBook


В избранное