Учебник РНР
Назад Глава 13. Классы и Объекты Вперёд

::(два двоеточия)

Предупреждение

Следующая информация верна только по отношению к PHP 4.

Иногда удобно обращаться к функциям или переменным в базовых классах или обратиться к функциям в классах, которые ещё не имеют экземпляров. Операция :: используется именно для этого.

class A
{
    function example()
    {
        echo "I am the original function A::example().<br>\n";
    }
}

class B extends A
{
    function example()
    {
        echo "I am the redefined function B::example().<br>\n";
        A::example();
    }
}

// нет объекта класса A.
// будет напечатано
//   I am the original function A::example().<br>
A::example();

// создаётся объект класса B.
$b = new B;

// будет напечатано
//   I am the redefined function B::example().<br>
//   I am the original function A::example().<br>
$b->example();

Вышеприведённый пример вызывает функцию example() в классе A, но объектов класса A нет, поэтому мы не можем записать $a->example() или что-нибудь подобное. Вместо этого мы вызываем example() как 'функцию класса', то есть как функцию самого класса, а не объекта этого класса.

Имеются функции класса, но нет переменных класса. Фактически, в момент вызова, объектов вообще нет. Таким образом, функция класса не может использовать переменные объектов (но может использовать локальные или глобальные переменные) и вообще не может использовать $this.

В приведённом примере class B переопределяет функцию example(). Оригинальное определение в class A скрывается и больше не доступно, если только вы не обратитесь специально к реализации example() в class A с использованием операции ::. Запишите A::example() для этого (фактически вы должны записать parent::example(), как показано в предыдущем разделе).

В этом контексте имеется текущий объект, и он может иметь переменные объекта. Таким образом, при использовании ВНУТРИ функции объекта, вы может использовать $this и переменные объекта.


Назад Оглавление Вперёд
Конструкторы Вверх parent