::(два
двоеточия)Предупреждение! |
---|
Следующая информация верна только по отношению к 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 и переменные объекта.
|