Следното е валидно само за PHP 4 и по-нови версии.
Понякога е полезно да се обръщаме към функции и променливи от базовите класове или да се обръщаме към функции, които все още нямат инстанции. В тези случаи се използва оператора ::.
<?php
class A {
function example() {
echo "Аз съм оригиналната функция A::example().<br />\n";
}
}
class B extends A {
function example() {
echo "Аз съм повторно-дефинираната функция B::example().<br />\n";
A::example();
}
}
// няма обект от клас A.
// това ще изведе
// Аз съм оригиналната функция A::example().<br />
A::example();
// създаване на обект от клас B.
$b = new B;
// това ще изведе
// Аз съм повторно-дефинираната функция B::example().<br />
// Аз съм оригиналната функция A::example().<br />
$b->example();
?>
В горния пример се извиква функция example() на клас A, без да е създаден обект от клас A, така че няма как да се напише $a->example() или нещо подобно. Вместо това example() се извиква като функция на класа, която е функция на самия клас, а не на обект от този клас.
Съществуват функции на класа, но не променливи на класа. В действителност, въобще не съществува обект в момента на извикването. По този начин функцията на класа не може да използва променливи на класа (но може да ползва локални или глобални променливи) и изобщо не може да използва $this.
В горния пример в клас B е дефинирана повторно функцията example(). Първоначалната дефиниция в клас А е препокрита и е недостъпна, освен ако не се обърнете изрично към реализацията на example() в клас A посредством оператора ::. Напишете A::example(), за да направите това (всъщност е по-добре да напишете parent::example(), както е показано в следващия раздел.
В контекста на казаното по-горе, съществува текущ обект и той може да има променливи. По този начин, при извикването от тялото на функция, можете да използвате ключовата дума и променливи на обекта.